二维数组被实现为一维数组的数组。这并不像你想象的那么可怕。它是您已经知道的一维对象数组的扩展。例如下面二维数组声明:
int[][] myArray;//1.
声明一个变量myArray,该变量将来可能引用数组对象。在这一点上,关于行或列的数量还没有提到。
要创建包含3行的数组,请执行以下操作:
myArray=new int[3][];//2.
现在myArray引用了一个数组对象。数组对象有3个单元格。每个单元格可能(将来)引用一个int数组,即int[]对象。然而,还没有一个单元格指向某个对象。它们被初始化为null。
创建第0行的一种方法是:
myArray[0]=new int[3];//3.
这将创建一个1D数组对象,并将其引用放在myArray的单元格0中。1D数组的单元格初始化为0。
可以将先前构造的一维数组分配给一行:
int[] x={0,2};
int[] y={0,1,2,3,4};
myArray[1]=x;
myArray[2]=y;//4.
行不需要具有相同数量的单元格。
(因为相当于C或C++在堆上的动态分配,几行,第行几列都随意。)
前面的语句逐步构造2D数组。通常你不会这样做。
(Java的二维数组有点类似于C/C++的动态指针数组,不同的是,C++的二维动态数组是通过一维指针数组的每一个指针去指向一维数组。另外,Java数组是有初始化和边界检查的)
对于二维数组的长度,各维的长度都分别用length()方法来统计:
class unevenExample3
{
public static void main(String[] arg)
{
//declare and construct a 2D array
int[][]uneven=
{{1,9,4},
{0,2},
{0,1,2,3,4}};
//print out the array
for(int row=0;row<uneven.length;row++)
{
System.out.print("Row"+row+":");
for(int col=0;col<uneven[row].length;col++)
System.out.print(uneven[row][col]+"");
System.out.println();
}
}
}