2012-12-11 5 views
5

chcę użyć ArrayList zamiast tablicy na następujący kod:2d ArrayList placement

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

To jak ArrayList powinien wyglądać Chyba:

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

Ale to jest tak mylące, ponieważ Nie mogę użyć metody get .. Nie wiem jak to zrobić.

Odpowiedz

2

Spróbuj ten sposób

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

Output:

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

Spróbuj tego: ar1.get(k).get(j)

Pierwszy get() dostaje ArrayList w indeksie k; drugi get() otrzymuje żądany ciąg.

Jeśli chcesz ustawić ciąg na [k, j], możesz użyć ar1.get(k).set(j, str). Oczywiście ar1.get(k) nie może mieć wartości null. Będziesz musiał dodać lub ustawić ArrayList z czymś podobnym do ar1.add(new ArrayList<String>()); przy pierwszym użyciu ArrayList w tym indeksie.

Podobnie, można użyć ar1.get(k).add(str), aby dodać str na końcu tablicy ArrayList w indeksie k, jeśli ArrayList ma zbyt mało elementów.

+0

Ale muszę wstawić wartość do ArrayList. ar1.get (k) .get (j) .add (coś) nie jest możliwe –

+0

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

+0

Lub ar1.get (k).dodać coś); dodać element – Doorknob

0

Tablica 2-d jest prawdopodobnie lepszą abstrakcją, ale jeśli chcesz utworzyć ArrayList of ArrayLists z innych powodów, można to zrobić. Pamiętaj tylko, że musisz dodać sam wiersz, zanim dodasz element do wiersza.

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

Otrzymuję wyjątek w wątku" AWT-EventQueue-0 "java.lang.IndexOutOfBoundsException: Index: 0, Rozmiar: 0 dla tej linii: ar1.get (i) .set (j, ""); wierd –

1

jej zawsze dobrą praktyką jest stosowanie List typ podczas deklarowania ArrayList. Więc zamiast

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

użytku

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

można łatwo dodać elementy w arraylist przez .add metody (element). Przeczytaj zawsze pomocną javadoc dla pełnej listy metod list. Na początku jest pusto. Aby rozpocząć wypełnianie go, trzeba stworzyć 1D ArrayList

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

następnie dodać 1d ArrayList w was 2d ArrayList

ar1.add(a); 

aby wstawić element na liście 2d, należy uzyskać dostęp do stanowiska listę 1d gdzie chcesz wstawić, następnie wykonaj .add(String).

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

sam, aby uzyskać element na liście 2d

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

To jest to, co mam, chociaż jeśli wstawię wartość na indeksie 4, a następnie indeksie 1, indeks, który był na 4, jest teraz obniżony! EDYCJA - używanie zestawu, nie dodawanie nadpisań, dobrze, jeśli wiesz dokładnie, ile masz – FredoAF