[英]Deep copy of an ArrayList<Arraylist> in JAVA
我检查了其他答案,但找不到正确的答案。 我想创建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复制的内容,这使我不得不使用.get()方法进行for循环。我觉得最后它们基本上是相同的。
您可以简单地使用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中的元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.