2017-05-24 40 views
0

Also, ich habe diesen Anwendungsfall:ArrayList entfernt Objekt von einer anderen ArrayList?

ArrayList<String> test1 = new ArrayList<String>(); 
test1.add("string1"); 
test1.add("string2"); 

ArrayList<String> test2 = test1; 
test2.remove(0); 
System.out.println(test1.get(0)); // Expect to see "string1" 

Die erste Arraylist test1, hat zwei String-Elemente. Dann mache ich eine neue (?) ArrayList, test2, die dasselbe ist wie test1. Wenn ich das erste Element aus test2 (was "String1" ist) entfernen und dann versuchen, das erste Element von test1 anzuzeigen, gibt es "string2" zurück ... auch dort wird das erste Element "string1" irgendwie entfernt.

Wie ist das möglich?

+6

Sie verwenden die gleiche Instanz der Arraylist in beiden Variablen –

Antwort

1

Dann mache ich eine neue (?) ArrayList, test2, das ist das gleiche wie test1.

Nein, haben Sie nicht. Sie haben gerade Ihre Arraylist 2 auf Arraylist 1 gerichtet.

Sie können entweder einen flachen Konstruktor der Liste verwenden oder addAll-Methode verwenden.

List<String> test2 = new ArrayList<String>(); 
test2.addAll(test1); 
0

Sie zuweisen die Referenz von test1-test2. Das bedeutet, dass sich beide Methoden auf eine beziehen, die sich auch in der anderen widerspiegelt, da sie sich auf das gleiche Objekt beziehen.

Um das zu erreichen, was Sie wollen, tun

List<String> test2 = new ArrayList<>(test1); 

Dies kopiert den Inhalt der test1-test2.

0

Erstellen Sie ein neues Arraylist mit den gleichen Elementen wie test1

ArrayList<String> test2 = new ArrayList<>(test1) 
+0

Warum nicht einfach 'Arraylist test2 = new Arraylist <> (test1)'? Was denkst du, dass 'Arrays.asList()' zum Bild beiträgt? –

0
ArrayList<String> test1 = new ArrayList<String>(); 
    test1.add("string1"); 
    test1.add("string2"); 

    ArrayList<String> test2 = test1; 
    test2.remove(0); 
    System.out.println(test1.get(0)); // Expect to see "string1" 

    ArrayList<String> test3 = new ArrayList<>(); 

Auf den Code im Debug-Laufen Sie, dass der Verweis von test1 sehen und test2 an der gleichen Stelle zeigt. Dies liegt daran, dass Sie die Werte nicht kopieren, sondern der anderen Liste denselben Verweis zuweisen. Beachten Sie, dass die Referenz von test3 ist anders als die anderen 2.

Um nur die Werte kopieren Sie verwenden können

test2 = new ArrayList<Object>(test1); 

finden Sie auf das Bild unten angebracht, um den Referenzwert anzuzeigen.

Result of running the code stated above in debug

Verwandte Themen