大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 二维数组对象

一维数组使用数组名称与一个索引值来指定存取数组元素,您也可以声明二维数组,二维数组使用数组名称与两个索引值来指定存取数组元素,其声明方式与一维 数组类似:
int[][] arr = {{1, 2, 3},
               {4, 5, 6}};

从上面这个程序片段来看,就可以清楚的看出二维数组的索引方式,您声明了2列(Row)3行(Column)的数组,您可以使用{ }与适当的断行协助您指定数组初值,下面这个程序简单的示范二维数组的存取:

  • TwoDimarray.java
public class TwoDimArray { 
public static void main(String[] args) {
int[][] arr = {{1, 2, 3},
{4, 5, 6}};
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}

执行结果:
1 2 3
4 5 6


在使用二维数组对象时,注意length所代表的长度,数组名称直接加上length,所指的是有几列(Row),而使用索引加上length,指的是该列所拥有的元素,也就是行(Column)数目,要了解为何是这样,必须从对象配置的角度来说明。

以对象的方式来配置一个二维数组对象,您使用以下的语法:
int[][] arr = new int[2][3];

上面这个程序片段中,您配置了2列3行的二维数组对象,由于数据类型是int,所以数组元素的默认元素为0,事实上这样的语法是Java为了程序设计人员使用上的方便所设计的,来细究配置的细节。

在上面的程序片段中,其实arr[0]、arr[1]是两个一维数组对象,其长度为3,而arr的类型为int[][],内容值为arr[0]与arr[1],其关系如下:
二维数组配置

从上图中您可以看到,arr名称指向int[][]类型的对象,而arr[0]与arr[1]再分别指向一个一维数组对象,所以这也就是为何上面的程序中,使 用的length所表示的长度意义,您也可以知道,在Java中,一个二维数组的配置,各个元素的内存位置并不是连续的。

同样的道理,您也可以声明三维以上的数组,如果要声明同时初始元素值,可以使用以下的语法:
int[][][] arr = {
                  {{1, 2, 3}, {4, 5, 6}},
                  {{7, 8, 9}, {10, 11, 12}}
                };

上面这个程序片段所声明的三维数组是2x2x3,您将之想为两面2x3二维数组交叠在一起就是了,每一面的元素如下:
第一面
1 2 3
4 5 6

第二面
7  8  9
10 11 12

您也可以藉由立方体的(x, y, z)关系来标示三个索引值的关系,也就是列、行与高。

如果要动态声明三维数组,就使用以下的语法:
int[][][] arr = new int[2][2][3];

多维以上的数组在Java中也是可行的,但并不建议使用,使用多维数组会让元素索引的指定更加困难,此时适当的将数据加以分割,或是使用其它的数据结构来解决,会比直接声明多维数组来得实在。

由以上的说明,接下来讨论一个进阶议题:不规则数组。数组的维度不一定要是四四方方的,您也可以制作一个二维数组,而每个维度的长度并不相同,例如:

  • TwoDimArray.java
public class TwoDimArray { 
public static void main(String[] args) {
int arr[][];

arr = new int[2][];
arr[0] = new int[3];
arr[1] = new int[5];

for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++)
arr[i][j] = j + 1;
}

for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}

执行结果:
1 2 3
1 2 3 4 5 


这个例子只是上面的说明之观念延伸,在这个例子中,数组第一列的长度是3,而第二列的长度是5。