我有2个单独的数组列表。一个叫做spawnList,另一个叫做FoundList
我已经运行了代码,它生成了一个实体并将所述实体ID添加到spawnList,所以现在spawnList.size()等于1
下一步运行它会清除foundList搜索实体,并将发现的内容与spawnList进行比较,所有匹配项都会添加到foundList中。
我遇到的怪异问题是当foundList被清除时,spawnList也被清除了
我缩小了范围,并进行了一些打印测试
System.out.println("spawnList = " + this.spawnList.size());
this.foundList.clear();
System.out.println("spawnList = " + this.spawnList.size());
这将打印出来
spawnList = 1
spawnList = 0
为什么清除foundList时会清除spawnList?
最佳答案
你写过代码吗spawnList = foundList
或foundList = spawnList
?
如果是这样,由于ArrayList
是一个对象,您实际上并没有在复制这些列表,因此使它们引用了同一对象。 (即,您对一个人所做的一切都会对另一个人所做)。
如果您想减轻这种情况,而不是直接将列表设置为彼此相等,则可以执行以下操作foundList = new ArrayList<>(spawnList)
因为这将使两个数组成为单独的对象。
取决于数组中对象的类型,这仍然可能是一个问题,因为它们仍然是每个对象的相同实例。