(八)数组
1. 数组概述和一维数组
1.1 数组
数组是由多个类型相同的数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对数据进行管理。
1.2 数组组成
- 数组名
- 元素
- 索引
- 数组长度
1.3 数组特点
- 数组是有序排列的
- 数组本身是引用数据类型,数组元素可以是任意类型(基本数据类型和引用数据类型)
- 创建一个数组会在内存中开辟一整块连续的空间
- 数组的长度一确定就不可修改
1.4 数组分类
- 按维数分,一维数组、二维数组...
- 按数组元素数据类型分,基本数据类型元素的数组、引用数据类型元素的数组
1.5 一维数组的声明和初始化
① 声明
int[] ids;
String[] names
② 初始化
静态初始化:数组的初始化和数组元素的赋值同时进行
int[] ids = new int[]{1000,1001,1002,1003}; String[] names = new String[] {"A","B","C","D"};
动态初始化:数组的初始化和数组元素的赋值分开进行
int ids = new int[4]; String[] names = new String[5];
类型推断:特殊情况
int[] ids = {1000, 1001, 1002}; int ids[] = new int[4];
数组一旦初始化,长度就不变。
1.6 调用修改数组元素
通过索引方式调用,索引由 0 至 array.length - 1
1.7 获取数组长度
属性:length array.length
1.8 数组元素的 默认初始化值
- 数组元素为整型 :
0
- 数组元素为浮点型:
0.0
- 数组元素为
char
型:0
、\0
或\u0000
(表现为空格但不是空格) - 数组元素为
boolean
型:false
- 数组元素为引用数据类型( 比如
String
) 型:null
1.9 一维数组内存解析
一维数组的首地址存放在 栈 中,而栈中首地址指向的数组元素存放在 堆 中
声明数组的时候,首地址就已经在 栈 中确定了,数组元素存放的位置已经需要的内存空间也都在 堆 中确定。
若重新声明一维数组,则数组首地址将改变,原数组元素成为 内存垃圾 。
1.10 foreach 循环
Java 提供 foreach
循环对数组进行遍历
语法:
for (elementType e: arrayName) {
// some code.
}
举例:
int[] arr4 = new int[] {12, 31, 23, 25};
for (int e: arr4) {
System.out.println(e);
}
2. 二维数组和多维数组
2.1 二维数组的理解
一个数组作为另一个数组的元素而存在。
其实,从数组底层的运行机制来看,并没有多维数组。
2.2 二维数组的声明和初始化
- 静态初始化
int[][] arr1 = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9} };
- 动态初始化1
String[][] arr2 = new String[3][4];
- 动态初始化2
String[][] arr3 = new String[3][];
- 非标准形式
String[] arr4[] = new String[3][4]; String arr5[][] = new String[3][4];
- 错误示范
int[][] arr6 = new int[][3]; String[3][4] arr7 = new String[][]; int[][] arr8 = new int[3][3]{ {1,2,3}, {4,5,6}, {7,8,9} };
2.3 二维数组的调用
String[][] arr9 = new String[3][];
arr1[2] = new String[4]; // 在第3行定义了一个长度为4的数组
System.out.println(arr1[2][2]); //null
2.4 获取二维数组的长度
int[][] arr10 = new int[][]{ {1,2}, {3,4,5,6}, {7,8,9} };
System.out.println(arr10.length); // 3
System.out.println(arr10[0].length); // 2
System.out.println(arr10[1].length); // 4
2.5 遍历二维数组
for (int i = 0;i < arr11.length;i+=) {
for (int j = 0;j < arr11[i].length;j++) {
System.out.print(arr11[i][j] + "\t");
}
System.out.println();
}
2.6 二维数组的初始化值
规定
二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[i][j];
外层元素:
arr[i]
内层元素:
arr[i][j]
默认初始化值
初始化方式一:
int[][] arr = new int[i][j];
外层元素初始化值:地址值
内层元素初始化值:与一维数组初始化情况同
初始化方式二:
int[][] arr = new int[i][];
外层元素初始化值:
null
内层元素:外层不指向任何数组,不能调用,否则报错
2.7 二维数组的内存分析
参考一维数组内存分析