2016-10-28 10 views
0

Ich habe eine 2D-Arraylist, die ich mit mehreren 1D Arraylists füllen möchte. Mein Code ist der folgende:Hinzufügen einer Arraylist zu 2D-Arraylist in Java

ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> list = new ArrayList<String>(); 
    while (ts2.next()) { 

      list.add(ts2.getString("userName"); 
      list.add(ts2.getString("userId")); 
      array.add(list); 
      list.clear(); 

     } 

ich bemerkt habe, dass list.clear() die Elemente aus der Liste löscht aber löscht auch das Element aus dem Array. Am Ende sind sowohl Array als auch Liste leer. Wie kann ich eine Liste in Array hinzufügen und löschen Sie die Liste nach array.add (Liste);

Antwort

2

Sie können die Liste klonen:

array.add(list.clone()); 

Oder Sie können in der Schleife selbst die Liste Objekt instanziiert:

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

    while (ts2.next()) { 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add(ts2.getString("userName"); 
     list.add(ts2.getString("userId")); 
     array.add(list); 
    } 

Dann würden Sie nicht einmal brauchen löschen es.

+0

ich diese Nachricht erhalten: Die Methode add (Arraylist ) in der Art Arraylist > ist nicht anwendbar für die Argumente (Object) – konstantin

+0

versuchen, das Objekt als Arraylist zu werfen: 'array.add ((ArrayList ) list.clone()); ' –

1

Sie können dies tun:

ArrayList<String[]> arr = new ArrayList<String[]>(); 
    String[] str = new String[2]; 
    while (ts2.next()) { 
     str[0] = ts2.getString("userName"); 
     str[1] = ts2.getString("userId"); 
     arr.add(str); 
    } 

Wenn Sie eine Arraylist auch:

ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 
    while (ts2.next()) { 
     ArrayList<String> arrString = new ArrayList<String>(); 
     arrString.add(ts2.getString("userName")); 
     arrString.add(ts2.getString("userId")); 
     arr.add(arrString); 
    } 
1

Sie eine neue Instanz von ArrayList<> erstellen, um in den bestehenden hinzugefügt werden.

while (ts2.next()) { 
    List<String> list = new ArrayList<>(); 
    list.add(ts2.getString("userName")); 
    list.add(ts2.getString("userId")); 
    array.add(list); 
} 

Der bessere Ansatz besteht jedoch darin, diese Werte einer neuen Instanz einer Klasse zuzuordnen.

List<MyClass> = new ArrayList<>(); 

while (ts2.next()) { 
    MyClass i = new MyClass(ts2.getString("userName"), ts2.getString("userId")); 
    array.add(i); 
} 
Verwandte Themen