我檢查了其他答案,但我找不到我的問題的正確答案。 我想創建一個我的ArrayList<ArrayList>
的副本,因爲我需要原來的其他地方。我用不同的方式.clone()
方法:JAVA的ArrayList <Arraylist>的深拷貝
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()方法。我覺得它們在最後基本相同。
的元素,不要使用克隆()。使用另一個集合作爲參數的ArrayList構造函數。如果您想要深度複製,則需要循環。 –
看看這裏:http://stackoverflow.com/questions/715650/how-to-clone-arraylist-and-also-clone-its-contents –
我做了一個嵌套循環來達到內部ArrayList中的每個項目。它會拋出代碼前面提到的錯誤。我用這個代碼:>> for(ArrayList word:list)copyOfList.add(word.clone())...也是。 但它不能接受.add。 – msc87