2017-03-08 6 views
1

Ich möchte eine Liste von Listen in Java erstellen und das ist der Code, den ich dafür verwende.Erstellen einer Liste von Listen

public ArrayList<ArrayList<Object>> getRows(){ 
    ArrayList<ArrayList<Object>> listOfRows = new ArrayList<ArrayList<Object>>(); 
    ArrayList<Object> temporalRow = new ArrayList<Object>(); 
    IntNode rowSentinel = newTable.sentinel; 
    for (int y = 0; y < this.numberOfRows; y++) { 
     for (int x = 0; x < this.numberOfColumns; x++) { 
      rowSentinel =rowSentinel.next; 
      Object rowElement = rowSentinel.arrayCol.get(y); 
      temporalRow.add(rowElement); 
     } 
     rowSentinel = newTable.sentinel; 
     listOfRows.add(temporalRow); 
     System.out.print(temporalRow); 
     System.out.println(Arrays.toString(listOfRows.toArray())); 
     temporalRow.clear(); 
    } 
    return listOfRows; 
} 

Allerdings, wenn ich die endgültige Liste der Listen finden Sie in der Konsole gibt mir die folgende Ausgabe:

[oddy1, minino1, libertad1][[oddy1, minino1, libertad1]] 

[oddy2, minino2, libertad2][[oddy2, minino2, libertad2], [oddy2, minino2, libertad2]] 

[oddy3, minino3, libertad3][[oddy3, minino3, libertad3], [oddy3, minino3, libertad3], [oddy3, minino3, libertad3]] 

[[], [], []] 

Ich habe auch versucht listOfRows als ein Array von Objects definieren, Object[], mit Größe die Anzahl der Zeilen, und Elemente hinzufügen, indem Sie Object[0], Object[1] usw. tun, aber ich landete das gleiche Ergebnis.

Ich wollte eine endgültige Liste der Form mit dem Code

[[oddy1, minino1, libertad1],[oddy2, minino2, libertad2],[oddy3, minino3, libertad3]] 

ich wirklich nicht sehen, was ich falsch mache bekommen. Könnte mir jemand dabei helfen?

+0

möglich duplizieren mit: [http://stackoverflow.com/questions/1474954/working-with-a-list-of-lists-in-java](http://stackoverflow.com/questions/1474954/working -mit-einer-liste von-lists-in-java) –

+0

Probieren Sie einen Debugger, es wird helfen, den logischen Fehler zu finden. –

+0

Ich versuche das zu tun, aber ich sehe es nicht. Ich denke aus irgendeinem Grund, wenn ich add on listOfRows verwende, fügt es hinzu, was auch immer temporalRow an diesem Punkt im Programm betrifft. Ich weiß wirklich nicht was los ist. – user284639

Antwort

0

Ersetzen Sie temporalRow.clear() durch temporalRow = new ArrayList<Object>(), das sollte es beheben. Ihr listOfRows enthält jetzt dreimal die Referenz auf das gleiche Objekt, und die zuvor hinzugefügten Elemente werden immer durch temporalRow.clear() gelöscht.

0

Zahlung der Code unten

ArrayList<Test> temporalRow = new ArrayList<Test>(); 

    Test t = new Test(); 
    t.i = 5; 
    temporalRow.add(t); 
    System.out.println(temporalRow.get(0).i); 
    t.i = 6; 
    System.out.println(temporalRow.get(0).i); 

    class Test { 
public int i; 
} 

Der Ausgang des obigen Code ist 5 und weil temporalRow Liste der Referenz enthält t zum Objekt und wenn das Objekt an anderer Stelle geändert, werden die Änderungen, offensichtlich , reflektiert in temporalRow. Ihr Fall ist ähnlich. (Tipp: temporalRow.clear();) Ich denke, vielleicht möchten Sie sich mit dem Konzept der Deep Copy gegen flache Kopie vertraut machen.

Verwandte Themen