多维数组
多维数组可以看做是数组的数组。
比如二维数组,它就是一个特殊的一维数组,这个一维数组的每个元素又是一个一维数组。
int[][] a = new int[2][5];
比如上面这个二维数组,它就是一个特殊的一维数组,这个特殊的一维数组长度为2,它的两个元素又是一个一维数组,其长度为5。
三维数组也是一个特殊的一维数组,它的元素都是二维数组。
四维数组也是一个特殊的一维数组,它的元素都是三维数组。
…
n维数组也是一个特殊的一维数组,它的元素都是n-1维数组。
这就类似于递归,数组嵌套数组,多维数组就是数组里面还是数组,只有“最底层”的才是数组的数据。
在Java中,使用多维数组,可以让它除了最顶层的长度一致外,其他的长度都可以不一致。还是拿二维数组举例吧
//定义一个int类型的二维数组
// (一个特殊的一维数组,其元素是长度不确定的一维数组)
int[][] a = new int[2][];
//给这个特殊的一维数组的第一个元素赋值
a[0] = new int[5];
//给a[0]数组的元素a[0][n]赋值
for (int i = 0; i < 5; i++) {
a[0][i] = i + 1;
}
//给这个特殊的一维数组的第二个元素赋值
a[1] = new int[3];
//给a[1]数组的元素a[1][n]赋值
for (int i = 0; i < 3; i++) {
a[1][i] = i + 1;
}
//分别打印两个数组
System.out.println(Arrays.toString(a[0]));
System.out.println(Arrays.toString(a[1]));
对于多维数组,为什么除了顶层的长度需要确定外,其他长度都可以不一致的原因,博主以为:这还是需要我们将多维数组理解为特殊的一维数组,我们在声明这个特殊的一维数组时,我们必须确定它的长度,由于其内层还是数组,它的元素只是又指向了另外一个数组,我们对其下一层初始化时,就能指定随意合法的长度,因为它又是一个独立的数组。
对于多维数组,博主认为,只要将其层次理清楚,就是数组元素还是数组,我们只要熟悉数组的概念,将其嵌套,就是多维数组。
多维数组声明
二维数组:
-
dataType[][] arrayReVar = new dataType[m][n];
定义一个m*n的二维数组,就是二维数组的长度为m,它的元素是一个长度为n的一维数组。 -
dataType[][] arrayReVar = new dataType[m][];
与上一种方式类似,只是二维数组的元素(一维数组)的长度不确定。 -
dataType[][] arrayReVar = {{data11,data12,data13},{data21,data22},{data31,data32,data33,data34}};
这个二维数组定义了三个元素,它们分别是{data11,data12,data13},{data21,data22},{data31,data32,data33,data34}。
三维数组:
-
dataType[][][] arrayReVar = new dataType[m][n][k];
定义一个mnk的三维数组,就是三维数组的长度为m,它的元素是一个长度为n的二维数组。 -
dataType[][][] arrayReVar = new dataType[m][n][];
与上一种方式类似,三维数组的长度为m,它的元素是一个长度为n的二维数组,二维数组的元素(一维数组)的长度不确定。 -
dataType[][][] arrayReVar = new dataType[m][][];
与上一种方式类似,三维数组的长度为m,它的元素是一个长度不确定的二维数组。 -
dataType[][][] arrayReVar = {{{data111,data112,data113},{data121,data122},{data131,data132,data133,data134}},{{data211,data212,data213},{data221,data222},{data231,data232,data233,data234}}};
这个三维数组定义了两个个元素,它们分别是{{data111,data112,data113},{data121,data122},{data131,data132,data133,data134}},{{data211,data212,data213},{data221,data222},{data231,data232,data233,data234}}。
更高维的数组请自行脑补,也可在下方与博主讨论(╹▽╹)
我们在程序中,一般最多就使用到二维数组,说实话,自从未参加关于编程类的比赛后,博主就很少使用数组了,/笑哭。
由于博主现在很少使用数组,所以可能会有写的不详细的地方,甚至可能有错,欢迎各位同仁在下方指出,与博主进行探讨。