二维数组静态初始化定义格式
定义格式:
数据类型[][] 数组名 = new 数据类型[][] {{元素1,元素2},{元素1,元素2}};
简化格式:
数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
元素访问
数组名[索引][索引];
代码示例
public static void main(String[] args) {
//二维数组
/*
二维数组静态初始化格式:
数据类型[][] 数组名 = new 数据类型[][] {{元素1,元素2},{元素1,元素2}};
简化格式:
数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}};
元素访问:
数组名[索引][索引];
二维数组遍历:
先得到一维数组,再遍历一维数组获取元素*/
//1.二维数组静态初始化格式
//数据类型[][] 数组名 = new数据类型[][] {{元素1,元素2},{元素1,元素2}};
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5, 6, 7, 8}};
int[][] arr2 = {{1, 2, 3,}, {4, 5, 6, 7, 8}};
//以后建议这样定义,把每一个一维数组,单独写成一行
// 注意:每一个一维数组其实是二维数组中的元素,所以每一个一维数组之间需要用逗号隔开。最后一个一维数组后面不需要加逗号
int[][] arr3 = {
{1, 2, 3},
{4, 5, 6, 7, 8}
};
//2.获取元素
System.out.println(arr3[0]);//[I@366e2eef 得到的是二维数组中第一个一维数组元素的地址值
//arr3[0]:表示二维数组中第一个一维数组元素
//arr3[0][0]:表示二维数组中第一个一维数组中0索引的元素
System.out.println(arr3[0][0]);//1
System.out.println("==========================");
//3.遍历二维数组
//外循环:遍历二维数组,得到里面的每一个一维数组
for (int i = 0; i < arr3.length; i++) {
//i代表二维数组中的每一个索引
//arr3[i]:表示二维数组中的每一个元素(一维数组)
//内循环:遍历一维数组
for (int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j] + " ");
}
//每一个一维数组遍历完就换行
System.out.println();
}
}
二维数组动态初始化定义格式
定义格式:
数据类型[][] 数组名 = new 数据类型[m][n];
m表示这个二维数组里可以存放m个一维数组 n表示每一个一维数组,可以存放n个元素
代码示例
public static void main(String[] args) {
//1.利用动态初始化创建二维数组
//3表示二维数组的长度,可以装2个一维数组
//5表示每一个一维数组的长度为3
int[][] arr = new int[2][3];
//给二维数组赋值一个元素
arr[0][0] = 10;//第一个数组第一个0索引元素 10,其他没有赋值的默认为0
//遍历二维数组
//外循环:遍历每一个一维数组
for (int i = 0; i < arr.length; i++) {
//内循环:遍历一维数组里的每一个元素
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
//遍历完一个数组就换行
System.out.println();
}
}
二维数组内存图
内存详解
arr[0]表示第一个一维数组,指向的是第一个一维数组的地址值 0x0022;
arr[0][1]表示第一个一维数组中的1索引元素,0
特殊情况
情况一:
指定二维数组里有2个一维数组,但是不指定一维数组的长度
情况二:
把数组 arr1、arr2赋给二维数组,原来二维数组里的2个数组0x0022、0x0033则会被内存释放掉,释放后内存图如下:
总结
1、当我们需要把数据分组管理时,就需要用到二维数组
2、掌握二维数组的静态、动态初始化
3、如何给二维数组中的元素赋值
4、如何遍历二维数组