兩個選項浮現在腦海中:
- 調用
ArrayList
構造這需要另一個集合 - 這會讓副本
- 呼叫
clone()
在ArrayList
注意,這兩個將創建淺副本 - 每個列表將包含對相同對象的引用。這很好,如果它們是不可變的(比如字符串),但如果你想創建更深的副本,則需要做更多的工作。
順便說一句,您有沒有任何理由不使用泛型?例如,我可能會使用:
LinkedList<ArrayList<String>> partials = new LinkedList<ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
list.add("Test");
// Create a shallow copy and add a reference to that into the linked list
partials.add(new ArrayList<String>(list));
list.add("Another element");
// Prints 1, because the lists are distinct
System.out.println(partials.element().size());
如果沒有什麼應該改變鏈表列表中的內容,你可能想看看在Guava提供的一成不變的集合,或使用Collections.unmodifiableList
包裝你的克隆。請注意,後者僅在原始列表上創建了視圖,因此您仍然需要先執行克隆步驟。
...或使用Collections.unmodifiableList – MeBigFatGuy 2011-03-30 06:38:00
在實際的代碼中,我使用的是泛型,但是爲了讓這個例子更簡單些,我省略了它們。 – Charlotte 2011-03-30 06:38:54
@Charlotte:一般來說,讓您的示例代碼代表您的真實代碼是個不錯的主意。 – 2011-03-30 06:40:02