从另外两种方法添加ArrayList的意外输出

时间:2013-11-11 02:45:15

标签: java

在某些程序中如下:

ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> temp=new ArrayList<Integer>();

如果我使用

,我想将temp添加到结果中
result.add(new ArrayList<Integer>(temp));

然后最终输出是正确的,但如果我使用

result.add(temp);

然后我的最终输出是错误的。为什么?谢谢你的帮助!

2 个答案:

答案 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中(那是你描述的不受欢迎的行为。)