在某些程序中如下:
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp=new ArrayList<Integer>();
如果我使用
,我想将temp添加到结果中result.add(new ArrayList<Integer>(temp));
然后最终输出是正确的,但如果我使用
result.add(temp);
然后我的最终输出是错误的。为什么?谢谢你的帮助!
答案 0 :(得分:0)
这个result.add(new ArrayList<Integer>(temp))
和result.add(temp)
都会在result
生成相同的内容
如果不清楚地理解所需的输出,我看不出代码的实际错误。
此外,最好将ArrayList引用为左侧的List
并使用右侧的<>
菱形。让您的编码更轻松,更清晰:
List<List<Integer>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
temp.add(1);
temp.add(2);
result.add(temp);
System.out.println("Result: " + result);
输出完全符合指定,并且是List<List<Integer>>
:
结果:[[1,2]]
答案 1 :(得分:0)
致电时:
result.add(new ArrayList<Integer>(temp));
将 temp
复制到新的ArrayList中,最终结果将包含“未触及”的副本。
致电:
result.add(temp)
您要将temp
本身添加到result
,以便稍后在temp
上执行的操作将反映在result
中(那是你描述的不受欢迎的行为。)