在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
1. 数组的声明和初始化
1.1 声明数组
声明数组时,你需要指定数组元素的数据类型以及数组的名称。数组的声明有两种方式:
- 方式 1:
int[] arr; // 数组声明,arr是数组名,int是数组元素的数据类型
- 方式 2:
int arr[]; // 数组声明,arr是数组名,int是数组元素的数据类型
这两种声明方式是等价的,通常推荐使用 int[] arr
这种方式,因为它能够更好地体现出数组作为数据类型的特性。
1.2 初始化数组
初始化数组有两种主要方式:显式初始化和动态初始化。
- 显式初始化:在声明数组时,直接给数组赋值。
int[] arr = {1, 2, 3, 4, 5}; // 显式初始化数组
- 动态初始化:先声明数组,再指定数组的大小,之后可以逐个赋值。
int[] arr = new int[5]; // 创建一个长度为5的int类型数组 arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;
2. 数组的基本操作
2.1 访问数组元素
可以通过数组的下标来访问数组的元素。下标从 0
开始。
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[0]); // 输出 1
System.out.println(arr[2]); // 输出 3
2.2 获取数组长度
可以使用数组的 length
属性来获取数组的大小。
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length); // 输出 5
2.3 遍历数组
数组可以通过 for 循环、增强 for 循环、while 循环等方式进行遍历。
- 普通 for 循环:
int[] arr = {1, 2, 3, 4, 5}; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
- 增强 for 循环(foreach):
int[] arr = {1, 2, 3, 4, 5}; for (int num : arr) { System.out.println(num); }
3. 多维数组
Java 支持多维数组,最常见的是二维数组(矩阵)。声明和初始化方法与一维数组类似。
3.1 声明二维数组
- 方式 1:声明数组并指定数组大小。
int[][] matrix = new int[3][3]; // 3行3列的二维数组
- 方式 2:声明数组并使用显式初始化。
int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
3.2 访问二维数组元素
二维数组的元素可以通过 [i][j]
的方式访问,i
是行下标,j
是列下标。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(matrix[1][2]); // 输出 6
3.3 遍历二维数组
可以使用嵌套的 for 循环 来遍历二维数组。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println(); // 换行
}
4. 数组的常见操作
4.1 数组的排序
Java 提供了 Arrays
类来进行数组的排序,排序函数是 Arrays.sort()
。
import java.util.Arrays;
int[] arr = {5, 3, 8, 1, 2};
Arrays.sort(arr); // 对数组进行升序排序
System.out.println(Arrays.toString(arr)); // 输出 [1, 2, 3, 5, 8]
4.2 数组的查找
使用 Arrays.binarySearch()
可以进行二分查找。前提是数组必须是已排序的。
import java.util.Arrays;
int[] arr = {1, 2, 3, 5, 8};
int index = Arrays.binarySearch(arr, 5);
System.out.println(index); // 输出 3,表示 5 在数组中的索引位置
4.3 数组的复制
可以使用 Arrays.copyOf()
方法复制数组。
import java.util.Arrays;
int[] arr = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(arr, arr.length); // 完全复制数组
System.out.println(Arrays.toString(copy)); // 输出 [1, 2, 3, 4, 5]
4.4 数组的填充
可以使用 Arrays.fill()
方法填充数组中的元素。
import java.util.Arrays;
int[] arr = new int[5];
Arrays.fill(arr, 10); // 将数组所有元素填充为 10
System.out.println(Arrays.toString(arr)); // 输出 [10, 10, 10, 10, 10]
5. 数组的注意事项
- 数组大小:数组的大小一旦初始化后无法更改。你可以通过重新分配新的数组来改变数组的大小。
- 数组越界:如果访问一个数组中不存在的索引(超出范围),会抛出
ArrayIndexOutOfBoundsException
异常。 - 数组是对象:即使它存储的是基本数据类型,数组本身也是一个对象,因此可以通过
new
操作符来动态分配内存。
6. 总结
- 数组是一个固定长度的容器,用于存储相同类型的元素。
- Java 数组的基本操作包括声明、初始化、访问、遍历、排序、查找和复制。
- 数组的长度在创建时确定,不能动态调整大小。
- Java 提供了多种工具类,如
Arrays
,用于操作数组。
发表回复