java - List<List<Integer>> ArrayList 初始化不适用于 new 运算符 Java

标签 java for-loop arraylist initialization variable-assignment

我已经为这个问题苦恼了两天了。这个问题来自于我正在做的一些问题。基本上,当我使用

List<List<Integer>> temp = new ArrayList<>(result);

创建结果的新 ArrayList 副本,当我尝试在高级 for 循环中更改温度时,结果将发生变化。例如,

List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
List<List<Integer>> temp = new ArrayList<>(result);
int j = 0;
for (List<Integer> list: temp) {
    list.add(x[j]);
    j ++;
}

我对循环内的结果没有做任何事情,但结果以 [[1]] 结束,这与 temp 相同。

为什么会发生这种情况?非常感谢。

更新:感谢大家回答我的问题。我了解到浅拷贝就是原因。但是,我仍然遇到类似的问题。当我尝试更改以下代码中的温度时,结果已更新:

List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
List<List<Integer>> temp = new ArrayList<>();
for (List<Integer> list: result) {
    list.add(10000);
    temp.add(new ArrayList(list));
}

我不知道为什么结果是[[10000]]以及温度。像temp.add(new ArrayList(list))这样的add方法有什么问题吗?

最佳答案

发生这种情况是因为 List<List<Integer>> temp = new ArrayList<>(result);语句仅复制顶级列表。它将是包含对原始 result 中原始项目(也称为子列表)的引用的新列表。 .

您可以通过深层复制来解决此问题:

List<List<Integer>> temp = new ArrayList<>(); // empty list
for (List<Integer> sublist : result) {
    temp.add(new ArrayList<Integer>(result)); // copying a sublist and adding that
}

关于java - List<List<Integer>> ArrayList 初始化不适用于 new 运算符 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467714/

相关文章:

python - 有没有办法每次使用 for 循环调用列表中的项目?

java - 从 arrayList 中删除特殊元素

Javascript - 使用 Promise 运行 for 循环

loops - gnuplot for 带间隔的循环

java - 如何在 Java 中测试特定索引处是否存在对象?

java - 删除列表元素 - 我在 Java 中实现最佳性能的方法

java - 在 hibernate 中使用 Criteria api 如何使用投影实现延迟加载列表?

java - 为什么 Spring Boot 2.5.0 JMX Beans 没有显示在 JConsole 中

java - 使用相机进行光传感器仿真

Java -Xmx1028m 在 Mac OS X 中不起作用