我检查了其他答案,但我找不到我的问题的正确答案。
我想创建一个ArrayList<ArrayList>
的副本,因为我需要在其他地方使用原始版本。我以不同的方式使用.clone()
方法:
public class WordChecker {
private ArrayList<ArrayList> copyOfList = new ArrayList<ArrayList>();
public WordChecker(ArrayList<ArrayList> list) {
for (int i = 0; i < list.size(); i++)
for (int j = 0; j < 7; j++)
copyOfList = (ArrayList<ArrayList>) list.clone(); // without error
// copyOfList = list.clone();cannot convert from Object to
// ArrayList<ArrayList>
// copyOfList = list.get(i).clone();cannot convert from Object to
// ArrayList<ArrayList>
// copyOfList = list.get(i).get(j).clone();
}
但我的主要ArrayList
在我复制时仍然会发生变化。
在这种情况下,有谁可以告诉我如何获得深层复制?
答案: 我把复制机制放在我的类构造函数中:
private ArrayList<List> checkedTags = new ArrayList<List>();
public WordChecker(ArrayList<ArrayList> list)
{
for (ArrayList word: list) copyOfList.add((ArrayList) word.clone());
}
唯一的问题是,这不适用于从ArrayList复制,这使我通过for循环使用.get()方法。我觉得它们最后基本相同。
答案 0 :(得分:-1)
您只需使用ArrayList(Collection c)
构造函数
public <T> ArrayList<ArrayList<T>> deepCopy(ArrayList<ArrayList<T>> source) {
ArrayList<ArrayList<T>> dest = new ArrayList<ArrayList<T>>();
for(ArrayList<T> innerList : source) {
dest.add(new ArrayList<T>(innerList));
}
return dest;
}
<强>注意:强> 正如@Tim B所提到的,这并没有深层复制ArrayList
中的元素