数组

1. 数组-数组的概述

1. 数组的理解:

​ 数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

2. 相关概念:

数组名
元素
角标、下标、索引
数组的长度:元素的个数

3. 数组的特点:

  • 数组是有序排列的
  • 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间
  • 数组的长度一旦确定,就不能修改。

4. 数组的分类

① 照维数:一维数组、二维数组……
② 照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

2. 数组一维数组的初始化、遍历与元素默认初始化值

1. 一维数组的声明与初始化

正确的方式:
int num;//声明
num = 10;//初始化
int id = 1001;//声明 + 初始化

1
2
3
4
5
6
7
int[] ids;//声明
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];

int[] arr4 = {1,2,3,4,5};//类型推断

2. 一维数组元素的引用:通过角标的方式调用。

数组的角标(或索引从0开始的,到数组的长度-1结束。

1
2
3
4
5
names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
names[4] = "王宏志";//charAt(0)

3. 数组的长度:length

1
2
System.out.println(names.length);//5
System.out.println(ids.length);

说明:
数组一旦初始化,其长度就是确定的。// arr.length
数组长度一旦确定,就不可修改。

4. 一维数组的遍历

1
2
3
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}

5. 一维数组元素的默认初始化值

数组元素是整型:0
数组元素是浮点型:0.0

数组元素是char型:0或'\u0000',而非'0' (unicode编码)
数组元素是boolean型:false
数组元素是引用数据类型:null

3. 一维数组的内存解析

image-20250612170451660

第1次出现JVM内存结构

栈:方法内定义的变量--局部变量,存储在栈中

堆:开辟空间,放new出来的结构:放地址值(首地址值)、对象中的属性,

第1次JVM内存机构

4. 数组-二维数组的初始化、遍历与元素默认初始化值

1. 如何理解二维数组?

数组属于引用数据类型
数组的元素也可以是引用数据类型
一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。

2. 二维数组的声明与初始化

正确的方式:

1
2
3
4
5
6
7
8
9
10
int[] arr = new int[]{1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//也是正确的写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断

3. 如何调用二维数组元素:

1
2
3
4
5
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);//

4. 二维数组的长度:

1
2
3
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4

5. 遍历二维数组元素

1
2
3
4
5
6
for(int i = 0;i < arr4.length;i++){
for(int j = 0;j < arr4[i].length;j++){
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}

6. 二维数组元素的默认初始化值

  • 规定:二维数组分为外层数组的元素,内层数组的元素
1
2
3
int[][] arr = new int[4][3];
//外层元素:arr[0],arr[1]等
//内层元素:arr[0][0],arr[1][2]等
  • 针对于初始化方式一:比如:int[][] arr = new int[4][3];

外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同

  • 针对于初始化方式二:比如:int[][] arr = new int[4][];

外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。

5. 二维数组的内存解析

类似一维数组

image-20250612234922598

6. 数组-Arrays 工具类的使用与数组中的常见异常

1. 理解:

① 定义在java.util包下。
② Arrays:提供了很多操作数组的方法。

2. 使用:

2.1. 判断两个数组是否相等(比内容)。
1
2
3
4
5
boolean equals(int[] a,int[] b):
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
2.2. 输出数组信息。

​ System.out.println(Arrays.toString(arr1));

2.3. 将指定值填充到数组之中。
1
2
3
void fill(int[] a,int val):
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));//数组元素全替换成10了
2.4. 对数组进行排序。
1
2
3
void sort(int[] a):
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
2.5. 查找元素在数组中的位置
1
2
int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);

7. 数组的常见异常

1 数组角标越界异常

ArrayIndexOutOfBoundsException

1
2
3
4
5
6
7
int[] arr = new int[]{1,2,3,4,5};	
for(int i = 0;i <= arr.length;i++){
System.out.println(arr[i]);
}

System.out.println(arr[-2]);
System.out.println("hello");

2 空指针异常

NullPointerException

1
2
3
4
//情况一:
int[] arr1 = new int[]{1,2,3};
arr1 = null;
System.out.println(arr1[0]);
1
2
3
//情况二:
int[][] arr2 = new int[4][];
System.out.println(arr2[0][0]);
1
2
3
4
//情况三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());

一旦程序出现异常,未处理时,就终止执行。