写的代码只循环一次。让我们一起来看看:
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
这初始化result
,这是一个List
,其元素为List<Integer>
。然后添加一个元素以得到结果,因此result
是一个单元素列表。这一个元素本身就是一个零元素列表。
List<List<Integer>> temp = new ArrayList<>();
在这里,你初始化temp
也为包含List<Integer>
作为其元素类型List
,但它是空的。
for (List<Integer> list: result) {
list.add(10000);
temp.add(new ArrayList(list));
}
请注意,这里result
只有一个元素。这一元素是你在第二行给出的东西,result.add(new ArrayList<>());
。该循环将对result
的每个元素进行迭代,这将导致它只循环一次,因为result
只有一个元素。
发生这种情况时,result
的第一个元素将更新为包含10000
而非空列表的列表。所以result
仍然是一个singleton列表,但它的一个元素现在也将是一个包含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]
的列表。