[英]Unexpected outputs from two different ways of adding an ArrayList to another
在以下某些程序中:
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp=new ArrayList<Integer>();
我想在结果中添加temp
result.add(new ArrayList<Integer>(temp));
那么最终的输出是正确的,但是如果我使用
result.add(temp);
那么我的最终输出是错误的。 为什么? 谢谢您的帮助!
这个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]]
你打电话时:
result.add(new ArrayList<Integer>(temp));
temp
被复制到新的ArrayList中,最终结果将包含“未修改”的副本。
通过致电:
result.add(temp)
您将temp
本身添加到result
以便稍后在temp
将反映在result
(这是您描述的不需要的行为)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.