2017-02-03 3 views
0

Ich habe alles versucht, aber immer bezieht es sich auf das vorherige.Wie kopiert man eine ArrayList in eine andere, ohne zuerst zu referenzieren?

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i)); 
} 
+0

tut nur mListPreviousData = (Arraylist ) mAddedList.clone(); Sie müssen in Ihren Arraylist-Typ –

+1

eingeben Typ von beiden ArrayList ist das gleiche, deshalb referenziert es die vorherige – UserSharma

+0

Sie können [diese] (https://github.com/google/guava) -Bibliothek oder durch Konstruktor können Sie verwenden bekomme ** sleep ** copy. – DwlRathod

Antwort

1

Sie benötigen eine tiefe Kopie der zugrunde liegenden Objekte zu machen:

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i).clone()); 
} 

Vorzugsweise können Sie Ihre eigene clone() Methode implementieren.

Edit:

Oder eine tiefe Kopie der gesamten Arraylist tun:

mListPreviousData = (..cast to your type..) mAddedList.clone(); 
+0

Nachteil, wenn die ursprünglichen Listendaten geändert werden, wird die geklonte Kopie automatisch aktualisiert –

+0

gleiche Sache, ich will nicht, ich brauche zwei separate Listen. – UserSharma

+0

Wenn Sie nicht zwei separate Listen erstellen möchten, indem Sie Ihr Listenobjekt klonen, dann müssen Sie das Datenlistenelement jedes Mal innerhalb der Schleife erstellen und dann in Ihre mlistPreviousData-Liste aufnehmen. Für jedes Mal müssen Sie ein neues Objekt erstellen –

0
mListPreviousData = new ArrayList<>(); 
mListPreviousData.addAll(mAddedList); 
+0

Bitte geben Sie ein spezifischer Körper zu Ihrer Antwort, zum besseren Verständnis. – W4R10CK

Verwandte Themen