数组可以分为一维数组、二维数组、多维数组。在实际项目中,二维数据是不太推荐用的,而多维数组基本是不允许使用的。多维数组在使用的过程中,不太好理解,不太好去拆分,因为有很多限制问题,比如下标。
因此在数组的学习中,掌握一维数组和二维数组即可。
二维数组的理解
二维数组类似Excel表结构,Excel表的信息是以行和列的形式组织的。二维数组的第一个元素下标表示元素所在行,第二个下标表示元素所在列。
Java中的二维数组是数组的数组,即它是一个特殊的一维数组,它的每一个元素是一个一维数组。
int[][] arr = { { 1, 2, 3 }, { 2, 3, 4 }, { 3, 4, 5 } };
如定义的数组arr,它是长度为3的一维数组,arr中每个元素都是一个长度为3的一维数组。
二维数组并不要求每一个元素的数组长度相同。例如,下面代码中的定义的二维数组也是可以的。
int[][] arr = { { 1, 2 }, { 2, 3, 4, 5 }, { 3, 4, 5, 6, 7 } };
上面代码定义的arr是一个长度为3的一维数组,它的第一个元素是长度为2的一维数组,第二个元素是长度为4的一维数组,第三个元素是长度为5的一维数组。
创建
声明
以下三种声明方式都可以声明二维数组,推荐第一种声明方式。
数组元素类型[][] 数组名字;
数组元素类型[] 数组名字[];
数组元素类型 数组名字[][];
示例:
int[][] arr1;
int[] arr2[];
int arr3[][];
和一维数组相同的是,如果只是完成上面的声明过程,数组是不能使用的,因为还没有给它分配内存空间,此时arr1、arr2、arr3都是null。
声明的同时初始化
二维数组也有和一维数组对应的3种声明时初始化的方式。
例如:
int[][] arr1 = new int[2][3];
int[][] arr2 = new int[2][];
arr2[0] = new int[2];
arr2[1] = new int[3];
int[][] arr3 = new int[][] { { 1, 2 }, { 1, 2, 3 } };
int[][] arr4 = { { 1, 2 }, { 1, 2, 3 } };
如果二维数组的每个元素的数组长度相同,可以采用arr1这种方式,此时数组元素的值是对应类型的默认值,也可以采用arr3和arr4这种直接将数值对应元素的值输入的方式。
如果二维数组的每个元素的数组长度不同,可以采用arr2的方式,此时数组元素的值是对应类型的默认值,也可以采用arr3和arr4这种直接将数值对应元素的值输入的方式。
先声明,后初始化
和一维数组一样,如果是先声明后初始化的情况下,不能使用上面的arr4数组的方式。
补充
刚才我们碰到了这样一条语句 int[][] arr2 = new int[2][]; 这条语句表示此时,arr2有两个元素,每个元素都是数组类型的默认值——null。
int[][] arr2 = new int[2][];
System.out.println(arr2[0]);
System.out.println(arr2[1]);
结果:
null
null
判空
在一维数组中,我们列举了一维数组有变量、没对象,有变量、有对象但是长度为0的情况。现在思考一下,二维数组有变量、没对象和有变量、有对象但是长度为0的情况。
int[][] arr1;// 有变量、没对象
int[][] arr2 = new int[][] {};//有变量、有对象、长度为0