2012-12-11 14 views
5

ich eine Arraylist anstelle eines Arrays auf dem folgenden Code verwenden möchten:2d Arraylist Platzierung

for(int k=0;k<SIZE;k++) //size is 9 
    for(int j=0;j<SIZE;j++) 
     ar1[k][j] = buttons[k][j].getText(); 

Das ist, wie die Arraylist, wie ich denke, aussehen sollte: da

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

Aber es ist so verwirrend Ich kann die Get-Methode nicht verwenden. Ich weiß nicht, wie ich das machen soll.

Antwort

2

diese Weise versuchen

List<List<String>>ar1 = new ArrayList<>(); 
//lets say we want to have array [2, 4] 
//we will initialize it with nulls 
for (int i=0; i<2; i++){ 
    ar1.add(new ArrayList<String>()); 
    for(int j=0; j<4; j++) 
     ar1.get(i).add(null); 
} 
System.out.println("empty array="+ar1); 

//lets edit contend of that collection 
ar1.get(0).set(1, "position (0 , 1)"); 
ar1.get(1).set(3, "position (1 , 3)"); 
System.out.println("edited array="+ar1); 

//to get element [0, 1] we can use: ar1.get(0).get(1) 
System.out.println("element at [0,1]="+ar1.get(0).get(1)); 

Ausgang:

empty array=[[null, null, null, null], [null, null, null, null]] 
edited array=[[null, position (0 , 1), null, null], [null, null, null, position (1 , 3)]] 
element at [0,1]=position (0 , 1) 
2

Genau dies versuchen: ar1.get(k).get(j)

Die erste get() bekommt die Arraylist am Index k; Die zweite get() erhält die Zeichenfolge, die Sie möchten. Wenn Sie den String auf [k, j] setzen möchten, können Sie ar1.get(k).set(j, str) verwenden. Natürlich kann ar1.get(k) nicht null sein. Sie müssten eine ArrayList mit einer Art ar1.add(new ArrayList<String>()); hinzufügen oder festlegen, wenn Sie die ArrayList zum ersten Mal bei diesem Index verwenden.

In ähnlicher Weise können Sie ar1.get(k).add(str) verwenden, um str am Ende der ArrayList am Index k hinzuzufügen, wenn diese ArrayList zu wenige Elemente enthält.

+0

Aber ich brauche einen Wert in die Arraylist einzufügen. ar1.get (k) .get (j) .add (etwas) ist nicht möglich –

+0

ar1.get (k) .set (j, etwas); – Doorknob

+0

Oder ar1.get (k).Füge etwas hinzu); um ein Element hinzuzufügen – Doorknob

0

Ein 2-d-Array ist wahrscheinlich eine bessere Abstraktion, aber wenn Sie aus anderen Gründen eine ArrayList aus ArrayLists machen wollen, kann es gemacht werden. Denken Sie daran, dass Sie die Zeile selbst hinzufügen müssen, bevor Sie der Zeile ein Element hinzufügen.

//Initialize the rows 
ArrayList<ArrayList<String>> ar1 = new ArrayList<ArrayList<String>> 
for (int i=0; i<SIZE; i++) { 
    ar1.add(new ArrayList<String>()); 
    for (int j=0; j<SIZE; j++) { 
     ar1.get(i).set(j, ""); 
    } 
} 

//Now setting a value works 
ar1.get(row).set(column, value); 

//As does getting one 
String s = ar1.get(row).get(column); 
+0

Ich bekomme Ausnahme im Thread" AWT-EventQueue-0 "java.lang.IndexOutOfBoundsException: Index: 0, Größe: 0 für diese Zeile: ar1.get (i) .set (j, ""); wierd –

1

Es ist immer eine gute Praxis List Art zu verwenden, wenn ArrayList deklarieren. Also statt

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

Verwendung

List<List<String>>ar1 = new ArrayList<List<String>>(); 

Sie können ganz einfach Elemente in der Arraylist durch .ADD (Element) Methode hinzufügen. Lesen Sie die immer hilfreiche javadoc für die vollständige Liste der Listenmethoden. Am Anfang ist es natürlich leer. So starten Sie es bevölkern, benötigen Sie ein 1D-Arraylist erstellen

List<String> a = new ArrayList<String>() 
a.add("element"); 

dann die 1d Arraylist in Sie

2d Arraylist hinzufügen
ar1.add(a); 

Um ein Element in einer 2D-Liste einzufügen, müssen Sie die Position zugreifen die 1d arraylist, wo Sie einfügen möchten dann tun Sie eine .add(String).

ar1.get(0).add("newly added element"); //will get the first list then append the string to that list 

Gleiche wie ein Element in der 2d-Liste erhalten

ar1.get(0).get(0); //will get the first lis then get the first element of the pulled list 
+0

Dies ist, was ich habe, obwohl, wenn ich einen Wert bei Index 4 einfügen, dann Index 1, der Index, der bei 4 war, ist jetzt nach unten gedrückt! EDIT- Verwenden von Set, nicht hinzufügen überschreibt, gut, wenn Sie genau wissen, wie viele Sie haben werden – FredoAF