重点陈述:把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。对于二维数组的理解,我们可以看成是一维数组。其实,从数组底层的运行机制来看,其实没有多维数组。
0x00、二维数组[][]:数组中的数组
动态和静态初始化规则如下
规则1:
格式1(动态初始化):int[][] arr = new int[3][2];
定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0], arr[1], arr[2],给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
规则2:
格式2(动态初始化):int[][] arr = new int[3][];
二维数组中有3个一维数组,每个一维数组都是默认初始化值null (注意:区别于格式1),可以对这个三个一维数组分别进行初始化,arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]
规则3:
int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组,二维数组中有三个一维数组,每一个一维数组中具体元素也都已初始化,第一个一维数组 arr[0] = {3,8,2};第二个一维数组 arr[1] = {2,7};第三个一维数组 arr[2] = {9,0,1,6};第三个一维数组的长度表示方式:arr[2].length;
规则注意:
- int[][]arr = new int[][3]; 是经典的错误写法,因为不同于C++的写法。
- 注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
- 注意Java中多维数组不必都是规则矩阵形式
0x02、深入理解多维数组与内存地址的关系
因为Java编程语言中的二维数组只不过是数组的数组。所以在Java二维数组中,数据存储在行和列中,我们可以使用行索引和列索引来访问记录(就像一个Excel文件)。 如果数据是线性的,我们可以使用一维数组。然而,要处理多层次数据,我们必须使用多维数组。Java中的二维数组是多维数组的最简单形式。
数组的初始化遵循顺序执行,不能空对空。
实战代码:
分析这段代码与内存的关系:
int[][] arr = new int[3][]; arr[1] = new int[]{1,2,3}; arr[2] = new int[3]; Sysout(arr[0]);//null Sysout(arr[0][0]);//
实战代码2:
查看这段代码与内存的关系:
int[][] arr1 = new int[4][]; arr1[0] = new int[3]; arr1[1] = new int[]{1,2,3}; arr1[0][2] = 5; arr1 = new int[2][];
0x03、输出代码实例:
通过这个输出数组,可以实际观察到代码中的是什么?
class TwoDimensionalString
{
public static void main(String[] args)
{
String[][] str = new String[][]{{"one", "two"}, {"three", "four"},{"five","six"}};
System.out.println("Two dimensional string array elements are :\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
System.out.println("str["+i+"]["+j+"]:"+str[i][j]);
}
}
}
}
成功得到结果:
Two dimensional string array elements are :
str[0][0]:one
str[0][1]:two
str[1][0]:three
str[1][1]:four
str[2][0]:five
str[2][1]:six
0x04、总结:
在本文中,我们看到了Java中的多维数组及其用途,在Java中声明二维数组的各种方法,Java如何处理二维数组,以及JVM如何分配内存来实现二维数组,可以使用索引来访问和更改二维数组的元素,最后在Java中初始化和声明二维数组的各种方法,以及声明语句中的一些常见错误。
资料链接:
1.https://www.tutorialgateway.org/two-dimensional-array-in-java/
2.https://javatutoring.com/java-two-dimensional-array/
3.https://www.scaler.com/topics/two-dimensional-array-in-java/