2012-12-11 1 views
5

voglio usare un ArrayList invece di un array sul codice seguente:ArrayList 2d collocamento

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

Ecco come l'ArrayList dovrebbe essere simile immagino:

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

Ma è così confuso dal Non posso usare il metodo get .. Non so come farlo.

risposta

2

Prova questo modo

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)); 

uscita:

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

Basta provare questo: ar1.get(k).get(j)

La prima get() ottiene l'ArrayList all'indice k; il secondo get() ottiene la stringa desiderata.

Se si desidera impostare la stringa su [k, j], è possibile utilizzare ar1.get(k).set(j, str). Ovviamente, ar1.get(k) non può essere nullo. Dovresti aggiungere o impostare un ArrayList con qualcosa come ar1.add(new ArrayList<String>()); la prima volta che usi ArrayList in quell'indice.

Analogamente, è possibile utilizzare ar1.get(k).add(str) per aggiungere str alla fine di ArrayList all'indice k se ArrayList contiene troppo pochi elementi.

+0

ma ho bisogno di inserire un valore nella ArrayList. ar1.get (k) .get (j) .add (qualcosa) non è possibile –

+0

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

+0

Oppure ar1.get (k).aggiungere qualcosa); per aggiungere un elemento – Doorknob

0

Un array 2-d è probabilmente una migliore astrazione, ma se si desidera creare un ArrayList di ArrayList per altri motivi, è possibile farlo. Ricorda solo che devi aggiungere la riga stessa prima di aggiungere un elemento alla riga.

//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

Ricevo eccezioni nel thread" AWT-EventQueue-0 "java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 per questa riga: ar1.get (i) .set (j, ""); wierd –

1

sua sempre una buona pratica da usare List tipo quando si dichiara ArrayList. Così, invece di

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

uso

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

Si può facilmente aggiungere elementi nella arraylist attraverso il metodo .add (elemento). Leggi l'utile javadoc per l'elenco completo dei metodi di elenco. In un primo momento è vuoto. Per iniziare popolato, è necessario creare un arraylist 1d

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

quindi aggiungere l'arraylist 1d in voi 2d arraylist

ar1.add(a); 

Per inserire un elemento in una lista 2d, è necessario accedere alla posizione del l'array 1d in cui si desidera inserire quindi fare un .add(String).

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

Uguale, per ottenere un elemento nella lista 2d

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

Questo è quello che ho, anche se inserisco un valore nell'indice 4, quindi indice 1, l'indice che era a 4 è ora premuto verso il basso! MODIFICA - utilizzando set, non aggiungere sovrascritture, buona se sai esattamente quanti ne avrai – FredoAF