我有2个单独的数组列表。一个叫做spawnList,另一个叫做findList
我有代码运行,它生成一个实体并将所述实体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?
答案 0 :(得分:3)
你有没有写过代码
spawnList = foundList
或foundList = spawnList
?
如果是这样,因为ArrayList是一个你实际上并没有复制这些列表的对象,所以你让它们引用同一个对象。 (IE对一个人所做的一切都将完成另一个)。
如果您想要减轻这种情况而不是直接将列表设置为彼此相等,那么您可以执行类似
的操作 foundList = new ArrayList<>(spawnList)
因为这会使两个数组成为单独的对象。
根据数组中的对象类型,这可能仍然是个问题,因为它们仍然是每个对象的相同实例。