Java ArrayList .add() 覆盖以前的值

标签 java android arraylist

我已经检查了其他面临相同问题的人,并且几乎所有人都在实例化他们想要在循环之外添加的对象。我已经在我的 while 循环中这样做了,所以我猜这不是我的问题。

public ArrayList<SHMapTile> tiles = new ArrayList<SHMapTile>();
.
.
.
private void parseXML(XmlPullParser parser) throws XmlPullParserException, IOException
{
    int eventType = parser.getEventType();
    int i = 0;

    while ( eventType != XmlPullParser.END_DOCUMENT )
    {
        String name = null;

        switch ( eventType )
        {
            case XmlPullParser.START_TAG:
            {
                name = parser.getName();

                if ( name.equalsIgnoreCase("tile") )
                {
                    SHMapTile tile = new SHMapTile();
                    tile.gid = i;

                    tiles.add(tile);
                    System.out.println("gid: " + tiles.get(0).gid);
                    i++;
                }

                break;
            }

            case XmlPullParser.END_TAG:
            {
                name = parser.getName();

                if ( name.equalsIgnoreCase("data") )
                {
                    this.runOnUiThread(new Runnable() {
                        public void run() {
                            drawCurrentMapRegion();
                        }
                    });
                }

                break;
            }
        }

        eventType = parser.next();
    }
}

为了调试,我为每个新对象附加了一个计数器。当我打印出列表中第一个元素的计数器时,它总是不同的。我试过克隆。也没用。

最佳答案

正如您在评论中所说,SHMapTile 类的字段gidstatic

这意味着相同的值在类的所有 实例之间共享。如果您更新一个,它将在该类的所有实例中更新。去掉 static 修饰符就可以了

关于Java ArrayList .add() 覆盖以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377855/

相关文章:

java - 使用 'valueOf' 检索枚举会抛出 RuntimeException - 改用什么?

android - 在 Xamarin.Android 中将项目添加到适配器

java - 在 Android 7.0 上运行 UiAutomator2 的问题

java - org.datanucleus.sco.backed.ArrayList 无法转换为 java.util.Set

java - 2 类,按降序排列到ArrayList中

java - DOM 中不再存在移动元素 - selenium

java - 添加 spring-boot-starter-parent 会删除 javax.validation.*

java - 为单个实体禁用 JPA Hibernate 模式验证

java - 尝试克服Android Java jdk限制

java - 在 ArrayList 中搜索字符串;总是返回 false