【发布时间】:2016-11-22 21:22:29
【问题描述】:
我已经在这个问题上苦苦挣扎了两天。这个问题来自我正在做的一些问题。基本上,当我使用
List<List<Integer>> temp = new ArrayList<>(result);
要创建结果的新 ArrayList 副本,当我尝试在高级 for 循环中更改 temp 时,结果将发生变化。例如,
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 方法有什么问题吗?
【问题讨论】:
-
还有,[j]前面的x是做什么用的?
-
new ArrayList<>(result)只复制result的浅表副本,即它复制“外部”列表,但不复制其元素。
标签: java for-loop arraylist initialization variable-assignment