2017-05-05 152 views
0

我有兩個私有成員變量的對象anObjectJava的ArrayList的拷貝構造函數

public class anObject { 
    private String name; 
    private ArrayList<String> myList = new ArrayList<String>(); 
} 

我有一個構造函數:

public anObject() { 
    name = ""; 
} 

我有我的拷貝構造函數:

public anObject(anObject copy) { 
this(); 
newObject(copy); 
} 

public void newObject(anObject copyTwo) { 
    name = copyTwo.name; 
    // How to deep copy an ArrayList? 
} 

但是,我怎樣才能將我的ArrayList的所有元素「深度拷貝」到copyTwo,我的this.myList

我已經看過關於SO的其他問題,但他們的ArrayList都包含對象,而我的只是包含字符串。謝謝你的幫助!

+1

是什麼讓你覺得'String'不是一個對象? –

+0

如果你想爲你的列表做一個深層拷貝,你只需要在你的列表中使用一個foreach –

+0

'ArrayList'有一個[拷貝構造函數](https://docs.oracle.com/javase/7/docs/api/java/ util/ArrayList.html#ArrayList(java.util.Collection)),你可以使用它。 –

回答

4

創建一個新的參考名單,因爲你的名單持有字符串和字符串是不可變的,你可以這樣做:

List<String> copyString = new ArrayList<>(original); 
+0

所以這對於我所看到的「淺拷貝」來說不會有問題?我不希望更改一個對象來影響另一個對象。 – Coder117

+0

您正在使用'String'列表。這不可以 。 – davidxxx

+0

@davidxxx非常感謝! – Coder117

1

您可以使用新集合進行深層複製。在新系列的變化不會影響前面的列表

List<String> copyTwo= new ARrayList<String>(); 
copyTwo.addAll(myList); 
+2

爲什麼不能:'列表 copyTwo = new ArrayList (myList);'? – assylias

+1

嗨,這裏在stackoverflow,我們不只是提供代碼的問題。我們向他們解釋爲什麼這將解決他們的問題,或者它是如何工作的。請編輯你的答案,以反映這種心態:) – CraigR8806

+0

另一種選擇做到這一點 –