2012-12-11 66 views
5

我想在下面的代碼中使用的ArrayList,而不是一個數組:2D ArrayList中放置

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

這是ArrayList中應該如何看起來像我猜:

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

但它因爲如此混亂我不能使用get方法..我不知道該怎麼做。

回答

2

嘗試這種方式

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

輸出:

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

就試試這個:ar1.get(k).get(j)

第一get()索引k得到的ArrayList;第二個get()得到你想要的字符串。

如果要將字符串設置爲[k, j],則可以使用ar1.get(k).set(j, str)。當然,ar1.get(k)不能爲空。首次在該索引處使用ArrayList時,必須添加或設置一個類似於ar1.add(new ArrayList<String>());的ArrayList。

同樣,如果該ArrayList的元素太少,可以使用ar1.get(k).add(str)將str添加到位於索引k的ArrayList的末尾。

+0

的元素,但我需要一個值插入ArrayList中。 ar1.get(k).get(j).add(something)不可能 –

+0

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

+0

或ar1.get(k)。添點什麼);添加一個項目 – Doorknob

0

一個二維數組可能是一個更好的抽象,但是如果您想爲其他原因創建ArrayList的ArrayList,則可以完成此操作。請記住,在將元素添加到行之前,您需要添加行本身。

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

我在線程」AWT-EventQueue-0「java.lang.IndexOutOfBoundsException中收到異常:索引:0,大小:0對於這一行:ar1.get(i) .set(j,「」);奇怪 –

1

它總是一個很好的做法,宣佈ArrayList時使用List類型。因此,而不是

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

使用

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

您可以在ArrayList中通過。新增(元)方法很容易地添加元素。請閱讀有用的javadoc以獲取列表方法的完整列表。當然,它是空的。要開始填充它,你需要創建一個一維數組列表

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

然後在您添加一維數組列表二維數組列表

ar1.add(a); 

要在2D列表中插入一個元素,你必須訪問的位置要插入的1d陣列列表然後執行.add(String)

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

一樣,獲得在2D列表

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

這就是我所擁有的,雖然如果我在索引4處插入一個值,那麼索引爲1,那麼在4的索引現在被壓低了!編輯 - 使用集合,而不是添加覆蓋,如果你確切知道你將擁有多少,那麼這很好 – FredoAF