0

在某些程序中如下:

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

如果我使用,我想将 temp 添加到结果中

result.add(new ArrayList<Integer>(temp));

那么最终输出是正确的,但如果我使用

result.add(temp);

那么我的最终输出是错误的。为什么?谢谢您的帮助!

4

2 回答 2

0

该问题没有显示实际错误以及期望的输出应该是什么。

this , result.add(new ArrayList<Integer>(temp)), and this,result.add(temp)都将产生相同的内容result

如果没有清楚地理解所需的输出,我看不出代码到底有什么问题。

此外,最好将 ArrayList 称为List左侧的 a 并使用<>右侧的菱形。让您的编码更轻松、更清晰:

    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]]

于 2013-11-11T02:50:50.923 回答
0

你打电话时:

result.add(new ArrayList<Integer>(temp));

temp被复制到一个新的 ArrayList 中,最终结果将包含“未触及”的副本。

通过调用:

result.add(temp)


您将temp自己添加到,result因此您稍后将执行的操作temp将反映在result(这是您描述的不需要的行为)。

于 2013-11-11T02:55:31.113 回答