2016-06-04 3 views
0

Ich versuche, Objekte (in diesem Beispiel, um es einfach Strings zu halten) zu Arraylists hinzufügen, die als Arraylist gesammelt werden. Hier ist der Code:Java ArrayList von ArrayLists verhält sich seltsam beim Hinzufügen von Objekten

public static void main(String[] args) { 
    ArrayList dummylist = new ArrayList(); 
    ArrayList<ArrayList<String>> dummylistlist = new ArrayList<ArrayList<String>>(); 

    for (int j=0; j< 2; j++){ 
     dummylistlist.add(dummylist); 
     String text = "test"; 
     dummylistlist.get(j).add(text); 
    } 

    for (int j=0; j< 2; j++){ 
     System.out.println("arraylist "+j+" has size "+dummylistlist.get(j).size()); 
     System.out.println("Arraylist No."+j+" is ="+dummylistlist.get(j)); 
    } 
} 

Und der Ausgang ist:

arraylist 0 has size 2 
Arraylist No.0 is =[test, test] 
arraylist 1 has size 2 
Arraylist No.1 is =[test, test] 

Aber ich erwartet, dass es sein:

arraylist 0 has size 1 
Arraylist No.0 is =[test] 
arraylist 1 has size 1 
Arraylist No.1 is =[test] 

Warum wird die Methode hinzufügen (Text) fügt den „Test "String zu allen Unterlisten, damit es einmal in jeder Schleife hinzugefügt wird? Ich verstehe nicht. Können Sie mir helfen, meinen Code zu korrigieren, um die letztgenannte Ausgabe zu erreichen? Vielen Dank im Voraus.

+0

Rufen Sie nicht 'dummlistlist.add (dummylist);' Sie haben nur eine Liste, die 'Dummylist' genannt wird. – Kajal

+0

Du fügst dieselbe Liste zweimal in deine "Liste" ein und fügst deshalb "test" zweimal in "dummylist" ein. –

Antwort

0

Das Problem ist, dass Sie nur eine Liste erstellen, die Sie in die andere legen. Wenn Sie also get(j) aufrufen, rufen Sie immer dieselbe innere Liste ab und fügen das Element hinzu. Wenn Sie verschiedene Listen erstellen möchten, erstellen Sie sie innerhalb der Schleife.

0

Wenn Sie es arbeiten möchten, Sie dummylist Variable innerhalb der for Schleife initialisiert werden müssen Da Sie nur eine Instanz von dummylist in Ihrem Code haben, ist es die gleiche Referenz, die Sie bei jeder Schleifeniterationslatenzzeit hinzufügen. Aus diesem Grund müssen Sie bei jeder Schleifeniteration eine neue Instanz ArrayList erstellen

Verwandte Themen