【问题标题】:Arraylist.clear clearing all array lists?Arraylist.clear 清除所有数组列表?
【发布时间】:2016-02-29 20:42:41
【问题描述】:

我有 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?

【问题讨论】:

  • 你是如何声明这两个列表的?你能显示那个代码吗?
  • System.out.println(this.foundList == this.spawnList); -> 显示为真?
  • 最可能的解释是您没有有“两个单独的数组列表”。

标签: java arrays list


【解决方案1】:

你写过代码吗

spawnList = foundList 或 foundList = spawnList ?

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

如果您想缓解这种情况,而不是直接将列表设置为彼此相等,您可以执行类似

的操作

foundList = new ArrayList<>(spawnList)

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

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

【讨论】:

  • 是的,事情就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
相关资源
最近更新 更多