所写的代码只循环一次。一起来看看吧:
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 只有一个元素。那一个元素就是你在第 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] 的列表。