我遇到了一个问题。当我尝试在以下代码中更改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。像temp.add(new ArrayList(list))这样的add方法有什么问题吗?
答案 0 :(得分:0)
编写的代码只循环一次。我们来看看:
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
这会初始化result
,List
,其元素为List<Integer>
。然后,您将一个元素添加到结果中,因此result
是单个元素列表。那个元素本身就是一个零元素列表。
List<List<Integer>> temp = new ArrayList<>();
在这里,您初始化temp
也是List
,其中包含List<Integer>
作为其元素类型,但它是空的。
for (List<Integer> list: result) {
list.add(10000);
temp.add(new ArrayList(list));
}
请注意,result
只有一个元素。那个元素是你在第2行给它的东西result.add(new ArrayList<>());
。此循环将针对result
的每个元素进行迭代,这将导致它仅循环一次,因为result
只有一个元素。
发生这种情况时,result
的第一个元素将更新为包含10000
的列表,而不是空列表。因此result
仍然是单例列表,但它的一个元素现在也将是包含10000
的单例列表。
然后拨打temp.add(new ArrayList(list))
。致电new ArrayList(list)
会创建一个ArrayList
,其中包含list
所做的所有元素。当您致电时,list
是包含10000
的单身人士,因此new ArrayList(list)
也是仅包含数字10000
的单身人士。然后,您将ArrayList
添加到temp
,这是以前的空列表。现在,temp
是一个单例,它的一个元素是一个包含10000
的单例列表。
此时,result
和temp
都是包含一个元素的列表,每个元素都是一个只包含一个元素的列表,即10000
。这就是result
和temp
具有值[[10000]]
的原因,其中[10000]
是仅包含数字10000
的列表,[[10000]]
是一个列表只包含[10000]
。