use*_*504 1 java arrays 2d arraylist dynamic
我在使用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
预计产量为
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
Run Code Online (Sandbox Code Playgroud)
我没有理解为什么最后一个元素是在写所有其他元素.
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);
Run Code Online (Sandbox Code Playgroud)
或者更好的是,这样做:
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});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16299 次 |
| 最近记录: |