从原始版本中复制arraylist进行编辑

时间:2016-04-29 19:54:13

标签: java pointers arraylist

现在,我遇到了这个问题:

我有一个非空数组列表,声明为original。然后我这样做:

ArrayList<ArrayList<Integer>> temp = (ArrayList<ArrayList<Integer>>) original.clone();

temp.get(0).set(1,-1) ;

但结果却是意外地改变了两个列表中索引1的元素。

如何解决此问题?

3 个答案:

答案 0 :(得分:1)

clone生成ArrayList的浅表副本。要么使它成为深层复制,因为ArrayList是对象类型,因此它也可以创建它的新对象。

答案 1 :(得分:1)

你必须深层复制,你可以尝试下面的代码     for(int element:original)     {         temp.add(元件);     }

答案 2 :(得分:0)

clone制作ArrayList的浅表副本。从某种意义上说,这意味着从一个引用中影响ArrayList也会影响另一个引用。

相反,请使用new ArrayList(original)

编辑:我的错误。您必须浏览ArrayList的内容并克隆其中的每个对象。不幸的是,你ArrayList中有ArrayList个,所以如果你想要不同的Integer,你必须进行大量的迭代。