java java中使用Arraylist的动态二维数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3540713/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
dynamic 2d array in java using Arraylist
提问by user427504
I found some problem in creating dynamic 2d array with arraylist,The original code is tediously long to read so i am giving a simple code here,the problem is same in both the cases:
我在用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();
}
}
}
Output:
输出:
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
Output expected is
预期输出为
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
I don't under stand why the last element is over writting all other elements.
我不明白为什么最后一个元素会覆盖所有其他元素。
回答by missingfaktor
Initialize a new Integer[]every time you add a new row.
Integer[]每次添加新行时初始化一个新的。
That is, do it like this:
也就是说,这样做:
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);
Or better yet, do it this way:
或者更好的是,这样做:
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});
回答by meriton
Arrays are objects. ArrayList.add(E)adds a reference to the given Eobject to the list; it doesn't copy the object itself.
数组是对象。ArrayList.add(E)将给定E对象的引用添加到列表中;它不会复制对象本身。
So you should do:
所以你应该这样做:
al.add(test);
test = new int[3];
Which creates a new array object, so the second row of data is written into a separate array.
它创建了一个新的数组对象,因此第二行数据被写入一个单独的数组。

