我有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 = foundListfoundList = spawnList

如果是这样,由于ArrayList是一个对象,您实际上并没有在复制这些列表,因此使它们引用了同一对象。 (即,您对一个人所做的一切都会对另一个人所做)。

如果您想减轻这种情况,而不是直接将列表设置为彼此相等,则可以执行以下操作

foundList = new ArrayList<>(spawnList)

因为这将使两个数组成为单独的对象。

取决于数组中对象的类型,这仍然可能是一个问题,因为它们仍然是每个对象的相同实例。

09-10 23:43