2010-08-22 21 views
1

我發現在創建動態二維數組與ArrayList,原始代碼是繁瑣的長閱讀,所以我給這裏一個簡單的代碼,這兩種情況下的問題是相同的:動態二維數組在Java中使用Arraylist

import java.util.*; 

class test{ 
public static void main(String args[]){ 
    Integer test[]=new Integer[3]; 

    ArrayList<Integer[]> al=new ArrayList<Integer[]>(); 

    int i,t; 

    test[0]=1; 
    test[1]=2; 
    test[2]=3; 


    al.add(test); 
    test[0]=4; 
    test[1]=5; 
    test[2]=6; 

    al.add(test); 

    test[0]=7; 
    test[1]=8; 
    test[2]=9; 

    al.add(test); 



    test[0]=10; 
    test[1]=11; 
    test[2]=12; 
    al.add(test); 



    Integer table[][]=new Integer[al.size()][]; 
    table=al.toArray(table); 

    for(i=0;i<=al.size()-1;i++){ 

    for(t=0;t<3;t++){ 
     System.out.print(" "+i+" "+t+" "); 
     System.out.print(" "+table[i][t]+" ");} 
    System.out.println(); 
} 

    } 
} 

輸出:

0 0 10 0 1 11 0 2 12 
    1 0 10 1 1 11 1 2 12 
2 0 10 2 1 11 2 2 12 
3 0 10 3 1 11 3 2 12 

輸出預計爲

0 0 1 0 1 2 0 2 3 
1 0 4 1 1 5 1 2 6 
2 0 7 2 1 8 2 2 9 
3 0 10 3 1 11 3 2 12 

我沒有下架原因最後一個元素是寫完所有其他元素。

回答

9

每次添加新行時,都會初始化一個新的Integer[]

也就是說,像這樣做:

Integer[] test = new Integer[3]; 
List<Integer[]> al = new ArrayList<Integer[]>(); 
int i,t; 
test[0]=1; 
test[1]=2; 
test[2]=3; 
al.add(test); 
test = new Integer[3]; // Note this line 
test[0]=4; 
test[1]=5; 
test[2]=6; 
al.add(test); 
test = new Integer[3]; // Note this line 
test[0]=7; 
test[1]=8; 
test[2]=9; 
al.add(test); 
test = new Integer[3]; // Note this line 
test[0]=10; 
test[1]=11; 
test[2]=12; 
al.add(test); 

或者更好的是,做這種方式:

List<Integer[]> al = new ArrayList<Integer[]>(); 
al.add(new Integer[]{1, 2, 3}); 
al.add(new Integer[]{4, 5, 6}); 
al.add(new Integer[]{7, 8, 9}); 
al.add(new Integer[]{10, 11, 12}); 
1

數組是對象。 ArrayList.add(E)將給定的E對象的引用添加到列表中;它不會複製對象本身。

所以,你應該做的:

al.add(test); 
test = new int[3]; 

這將創建一個新的數組對象,所以數據的第二行被寫入到一個單獨的數組。