本章对数组这种引用数据类型做了较详细的介绍,对数组的声明、初始化及数组元素的使用做了详细的说明,并给出了一维数组的几个典型的应用,在二维数组的中特别指出了Java数组与其他编程语言的不同,给出了不规则数组的概念,并给出了一个不规则数组的具体应用实例。
5.2 多维数组
维数为二维或高于二维的数组称为多维数组,在java中并没有真正的多维数组,只有数组的数组。
5.2.1 二维数组的声明
二维数组与一维数组的声明类似,只是需要用两个“[]”来表明是二维数组的声明,格式如下:
数据类型 数组名[][];
或
数据类型[][] 数组名;
或
数据类型[]数组名[];
其中:数据类型可以是java的基本类型和引用类型,数组名要求是一个合法的标识符,两个“[]”,表示是一个二维数组。
5.2.2 二维数组的初始化
同一维数组一样,只声明了数组,这时候其值为null,要想使用数组,还需要做初始化工作。数组初始化为声明的数组指定数组元素个数,为数组元素分配空间并赋值。数组初始化可以通过如下几种方式完成。
1. 用new关键字初始化数组
用关键字new初始化数组时,除了为数组指定数组元素个数、分配存储空间外,还会为数组元素按照数据类型的不同赋初值。具体如下:
若为数值型,数组元素的默认值为0,;
若为布尔型,数组元素的默认值为false;
若为引用型,数组元素的默认值为空(null)。
(1)先声明数组,在初始化数组。这里实际上是两条语句,具体格式如下:
数据类型[][] 数组名; 或数据类型 数组名[][];
数组名=new 数据类型[length1][length2];
第一条语句是数组声明语句,第二条语句则是初始化语句。要求这两条语句中数组名、数据类型必须一致。Length1指定数组的行数,length2指定数组的列数。
数组的Length1和Length2可以是直接的int类型常数,也可以是已经赋值的int类型变量或int类型表达式。
例如:
int m=3,n=2;
int[] a;
a = new int[m][n];
上面的语句声明并初始化一个3行两列的数组a,同时,根据默认值的约定,数组a中的所有元素初值均为0
(2)在声明数组的同时用new关键字初始化数组。实际上,这种方式是将第一种方式的两条语句合并为一条语句。格式如下:
数据类型[][] 数组名 =new 数据类型[length1][length2];
或
数据类型 数组名[][]=new 数据类型[length1][length2];
例如:
int m=3,n=2;
int[][] a = new int[m][n];
2.用一个已经初始化的数组对数组初始化
可以直接使用一个已经初始化的数组对新声明的数组进行初始化。
格式如下:
数据类型[][] 数组名=已初始化数组
例如:
Int[][]a=new int[10][10];
Int[][]b=a;
同一维数组一样,这种初始化会使得数组a与b具有相同的存储地址,a数组与b数组指向了同一个物理地址,任何对数组a的改变都会使数组b做相应的修改,同样,任何对数组b的修改也会使a数组的内容发生变化。
3.直接指定初值的方式
用直接指定初值的方式初始化数组是指在声明数组的同时将数组元素的初值依次写入赋值号(=)后的一对大括号({})内,大括号中的每个元素也是一对大括号。如:
int a [][] = {{1,2},{3,4},{5,6}};
这样就定义了一个3行2列的数组。
5.2.3 不规则数组
像其他语言一样,在定义二维数组时,我们可以使用“int a[][]=new int[3][2]”的方式创建3行2列的数组,这样的数组是规则的,与数学上的矩阵一样。在java中我们还可以定义列数不同的数组,对于列数不同的数组称之为不规则数组。
不规则数组的定义有两种方式。
1.直接指定初值方式
如下语句:
int a [][] = {{1,2,3},{4,5},{6,7,8,9}};
就定义了一个不规则数组,这样,数组中各元素包括:
a[0][0], a[0][1], a[0][2],
a[1][0], a[1][1],
a[2][0], a[2][1], a[2][2], a[2][3],
其他元素的访问则会导致数组下标异常错误,如
System.out.println(a[0][3]);
System.out.println(a[1][2]);
System.out.println(a[1][3]);
都会产生异常 考试站网校
2.用new关键字初始化数组
除了直接指定初值的方式外,还可以使用new关键字创建不规则数组,如下语句同样创建了一个不规则数组:
int[ ][ ] arr=new int[3][];
arr[0]=new int[3];
arr[1]=new int[2];
arr[2]=new int[4];
这里需要注意的是“int[ ][ ] arr=new int[3][];”语句与C++的定义方式正好相反,在C++中,数组的定义形式为“int[ ][ ] arr=new int[][3];”,读者一定不要混淆。
不规则数组的好处是可以节省存储空间,对于列不是完全相同的时候可以使用,在下面的杨辉三角形的例子中使用的就是不规则数组。