1. 什么是数组?

数组是 Java 中最基础、最常用的数据结构之一,用于存储固定大小相同类型元素的集合。数组在内存中是连续存储的,可以通过索引(从 0 开始)快速访问任意元素。

2. 数组的声明与初始化

2.1 声明数组

Java 数组的声明有两种常见语法:

// 方式一:类型[] 数组名;
int[] numbers;
String[] names;

// 方式二:类型 数组名[];
int numbers[];
String names[];

推荐使用第一种方式,因为类型与方括号结合更清晰,表明“int 数组”类型。

2.2 初始化数组

数组初始化分为静态初始化和动态初始化:

// 静态初始化:声明时直接赋值
int[] scores = {90, 85, 78, 92, 88};
String[] fruits = {"Apple", "Banana", "Orange"};

// 动态初始化:先指定长度,后赋值
int[] arr = new int[5]; // 创建长度为 5 的 int 数组,默认值全为 0
arr[0] = 10;
arr[1] = 20;

3. 数组的基本操作

3.1 访问与修改元素

int[] nums = {10, 20, 30, 40, 50};

// 访问元素
int first = nums[0]; // 10
int third = nums[2]; // 30

// 修改元素
nums[1] = 25; // 将第二个元素改为 25
System.out.println(nums[1]); // 输出 25

3.2 获取数组长度

使用 length 属性(注意不是方法):

int[] arr = {1, 2, 3, 4, 5};
int len = arr.length; // 5

3.3 遍历数组

常用的遍历方式有三种:

int[] arr = {10, 20, 30};

// 1. for 循环(最常用)
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// 2. for-each 循环(Java 5+)
for (int num : arr) {
    System.out.println(num);
}

// 3. while 循环
int i = 0;
while (i < arr.length) {
    System.out.println(arr[i]);
    i++;
}

4. 多维数组

Java 支持多维数组,最常见的是二维数组(可以理解为数组的数组)。

// 声明并初始化二维数组
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问元素
int value = matrix[1][2]; // 6(第二行第三列)

// 遍历二维数组
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();
}

5. 数组的常用工具类

5.1 Arrays 类

java.util.Arrays 提供了丰富的数组操作方法:

import java.util.Arrays;

int[] arr = {5, 2, 8, 1, 9};

// 排序
Arrays.sort(arr); // [1, 2, 5, 8, 9]

// 二分查找(数组必须先排序)
int index = Arrays.binarySearch(arr, 5); // 2

// 数组转字符串
String str = Arrays.toString(arr); // "[1, 2, 5, 8, 9]"

// 填充数组
Arrays.fill(arr, 0); // 所有元素变为 0

// 数组复制
int[] copy = Arrays.copyOf(arr, arr.length);

5.2 System.arraycopy()

用于高效地复制数组:

int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[5];
System.arraycopy(src, 0, dest, 0, src.length);

6. 数组的注意事项

  • 固定长度:数组一旦创建,长度不可改变。
  • 索引越界:访问不存在的索引会抛出 ArrayIndexOutOfBoundsException
  • 默认值:数值类型数组默认值为 0,布尔类型为 false,引用类型为 null。
  • 内存连续:数组元素在内存中连续存储,访问效率高,但插入/删除效率低。
  • 与集合的区别:数组长度固定,而 ArrayList 等集合可以动态扩容。

7. 实战示例:计算数组平均值

public class ArrayAverage {
    public static void main(String[] args) {
        int[] numbers = {85, 90, 78, 92, 88};
        int sum = 0;
        
        for (int num : numbers) {
            sum += num;
        }
        
        double average = (double) sum / numbers.length;
        System.out.println("平均分:" + average); // 86.6
    }
}

8. 总结

数组是 Java 编程的基石,掌握数组的声明、初始化、遍历和常用操作是每个 Java 开发者的必备技能。虽然数组长度固定,但在已知数据量或对性能要求高的场景下,数组仍然是首选数据结构。对于需要动态扩容的场景,可以考虑使用 ArrayList 等集合类。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐