繁体   English   中英

两种将ArrayList添加到另一种方式的意外输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM