现在,我遇到了这个问题:
我有一个非空数组列表,声明为original
。然后我这样做:
ArrayList<ArrayList<Integer>> temp = (ArrayList<ArrayList<Integer>>) original.clone();
temp.get(0).set(1,-1) ;
但结果却是意外地改变了两个列表中索引1
的元素。
如何解决此问题?
答案 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
,你必须进行大量的迭代。