在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。

1. 数组的声明和初始化

1.1 声明数组

声明数组时,你需要指定数组元素的数据类型以及数组的名称。数组的声明有两种方式:

  • 方式 1int[] arr; // 数组声明,arr是数组名,int是数组元素的数据类型
  • 方式 2int 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,用于操作数组。