2009-10-07 19 views
5

Ich versuche, den Inhalt einer Arraylist in ein anderes Objekt zu kopieren. Ich habe versucht, das neue Arraylist-Objekt auf folgende Weise initialisiertJava - Kopieren von Arraylist-Objekten

newArrList.addAll(oldArrList); 

und

newArrList = new ArrayList(oldArrList); 

Aber jedes Mal, wenn ich zu einer der Array-Listen eine Änderung vornehmen, wird der Wert ändert sich auch in den anderen Arraylist.

Kann mir bitte jemand sagen, wie ich das vermeiden kann.

Danke.

Antwort

15

Die ArrayList enthält nur Verweise auf Objekte - nicht die Objekte selbst. Wenn Sie den Inhalt einer Liste in eine andere kopieren, kopieren Sie diese Referenzen. Das bedeutet, dass sich die beiden Listen auf dieselben Objekte beziehen.

Ich vermute, dass, wenn Sie sagen, Sie eine Änderung an einer der Listen vornehmen, Sie tatsächlich bedeuten, dass Sie eine Änderung an einem der Objekte verwiesen von der Liste vornehmen. Das ist zu erwarten.

Wenn Sie möchten, dass die Listen Verweise auf unabhängige Objekte haben, müssen Sie eine tiefe Kopie der Objekte erstellen, während Sie sie von einer Liste in eine andere kopieren. Wie das genau funktioniert, hängt von den Objekten ab, die du kopierst.

+0

Hallo, mit 'deep copy' meinst du, dass die Objekte/Inhalte eins nach dem anderen kopiert werden sollten? –

+0

@ user1282407: Ja. Anstatt Verweise auf vorhandene Objekte beizubehalten, erstellen Sie neue Objekte mit demselben Inhalt (mit Ausnahme von unveränderlichen Objekten, bei denen es keine Rolle spielt). –

+0

Okay. Vielen Dank! Ich denke, es gibt keinen einfacheren Weg, Inhalte zu kopieren. . –