在讨论多维数组之前,我们先看看什么是数组的维数?数组的维数可以理解为一个数组中数据组合的层次数,只有一个层次的数据组合成的数组被称为一维数组。如下图:
上面是一个拥有5个元素的一维数组。
而多个一维数组再次组合生成的数组称为“二维数组”,即一维数组元素是一个一维数组。如下图:
上图中,a 数组的每一个元素均是一个一维数组,a[0] 下面存储的就是一个大小为 5 的一维数组。
而三维数组,即数组的每个元素存储的是一个二维数组。或者说,数组的每个元素是一个数组,而数组元素数组中还是一个数组。如下图:
上图中,a [i] 下面存储的一个数组,a[i][j] 下面依然存储的是一个数组。即 a[i] 下面存储的一个二维数组。根据上面的知识我们可以依次类推四维数组、五维数组……
注意:Java 中实际没有多维数组,只有一维数组。多维数组可以理解为“数组的数组”。
一维数组的声明在“什么是数组?”已经介绍,语法非常简单,如下:
<数据类型>[] <变量名>; 或者 <数据类型> <变量名>[];
例如:
// 声明一个拥有10个元素的一维数组 int[] a = new int[10];
二维数组声明和一维数组一样,支持静态声明和动态声明。静态声明语法如下:
<数组类型>[][] <变量名> = {{}, {}, ...};
例如:
// 合法 int[][] a = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
上面代码中声明了一个拥有两行五列的二维数组。
动态语法如下:
<数组类型>[][] <变量名>= new <数组类型>[<大小>][<大小>];
例如:
int[][] a = new int[2][5]; // 合法 int[][] a = new int[2][]; // 合法,未定义 a 数组元素数组的长度 int[][] a = new int[][5]; // 非法 int[][] a = new int[][]; // 非法
三维数组实际是将二维数组中存储的值改为存储数组。也分为静态声明和动态声明,静态声明如下:
int[][][] a = { { {1, 2, 3}, {4, 5, 6} }, { {7, 8, 9}, {10, 11, 12} } };
动态声明如下:
int[][][] a = new int[10][10][10]; // 合法 int[][][] a = new int[10][10][]; // 合法 int[][][] a = new int[10][][]; // 合法 int[][][] a = new int[][][10]; // 非法 int[][][] a = new int[][10][]; // 非法 int[][][] a = new int[][10][10]; // 非法
下面将展示使用二维数组存储用户信息,用户信息如下表:
示例:使用 Object 二维数组保存用户信息,然后使用 for-each 语句向控制台输出用户信息。代码如下:
public class Demo { public static void main(String[] args) { // 声明一个能存放3个用户的数组 Object[][] users = new Object[3][]; // 初始化数组 users[0] = new Object[]{1000, "张三", "男", 28}; users[1] = new Object[]{2000, "李四", "男", 32}; users[2] = new Object[]{3000, "王五", "女", 26}; // 迭代输出用户信息 for(Object[] user : users) { System.out.printf("ID=%d\tNAME=%s\tSEX=%s\tAGE=%d\n", user); } } }
运行示例,输出结果如下:
ID=1000 NAME=张三 SEX=男 AGE=28 ID=2000 NAME=李四 SEX=男 AGE=32 ID=3000 NAME=王五 SEX=女 AGE=26