2016-01-02 134 views
1

嗨我想創建一個ArrayList,它包含原始ArrayList中的對象的副本。我在這裏搜索,但不能足夠的早期帖子獲得幫助。下面是ArrayList我試圖做一個副本。需要一個ArrayList副本的對象的副本

ArrayList<Stuff> originallist = new ArrayList<Stuff>(); 

對不起,轉發!

+1

你讀過這裏給出的解釋:http://stackoverflow.com/questions/689370/java-collections-copy-list-i-dont-understand? – wiredolphin

+0

現在我已閱讀它。如果我創建一個淺拷貝,它是否只包含對象內存中相同位置的引用,還是創建所有對象的拷貝? –

+0

根據定義,淺拷貝包含對相同對象的引用。 –

回答

1

這並不是必須的,因爲它取決於如何複製對象。

假設的對象有一個名爲copyOf方法返回的對象的副本,你需要做的

ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size()); 
for (Stuff s : originallist) { 
    copy.add(s.copyOf()); 
} 

有許多地方的「copyOf」功能可能來自。如果一個對象實現了可複製的接口,那麼它可能是這個函數的一個來源(但有不同理由阻止接口)。有些類包含創建從現有的實例拷貝構造函數,在這種情況下,你可以在其他情況下做

ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size()); 
for (Stuff s : originallist) { 
    copy.add(new Stuff(s)); 
} 

,它可能必須用一種方法訪問字段進行(例如一個人對象,保持一個姓和名)

ArrayList<Person> copy = new ArrayList<Person>(originallist.size()); 
for (Person s : originallist) { 
    copy.add(new Person(s.getFirstName(),s.getLastName())); 
} 

要確定的是如何做到這一點,你應該看看API導遊的「東西」的對象。列表本身的實際複製很容易。