好的!下面给你一份Java数组超详细教程,涵盖数组的定义、初始化、访问、常见操作和注意点,适合入门和进阶学习。


Java数组(超详细)


目录

  1. 什么是数组
  2. 数组的特点
  3. 数组的声明与创建
  4. 数组的初始化方式
  5. 访问数组元素
  6. 数组的遍历
  7. 数组常用操作
  8. 多维数组
  9. 数组与集合的区别
  10. 注意事项与性能建议

1. 什么是数组

数组是存储同一种数据类型的固定长度的有序集合
每个元素在数组中都有一个索引(下标),索引从0开始。


2. 数组的特点

  • 固定长度,创建后长度不可变
  • 元素类型统一,只能存储声明时指定的数据类型
  • 连续内存空间,便于快速访问
  • 访问速度快,通过索引直接定位元素

3. 数组的声明与创建

// 声明数组变量(未分配空间)
int[] arr1;
int arr2[];  // 也可这样写,推荐第一种方式

// 创建数组,分配空间,指定长度为5
arr1 = new int[5];

// 声明并创建数组(常用)
int[] arr3 = new int[10];
  • new 关键字用于申请数组空间
  • 数组长度一旦确定不可更改

4. 数组的初始化方式

4.1 静态初始化(声明同时赋值)

int[] arr = {1, 2, 3, 4, 5};

编译器自动分配长度和空间

4.2 动态初始化(先声明,后赋值)

int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;

数组元素会被自动初始化为该类型的默认值(int默认0)


5. 访问数组元素

通过索引访问:

int value = arr[0];   // 访问第一个元素
arr[2] = 100;         // 修改第三个元素值
  • 索引范围是 [0, length-1]
  • 访问越界会抛出 ArrayIndexOutOfBoundsException

6. 数组的遍历

6.1 for循环遍历

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

6.2 增强for循环(foreach)

for(int num : arr) {
    System.out.println(num);
}

7. 数组常用操作

7.1 获取数组长度

int len = arr.length;

7.2 数组复制

int[] newArr = Arrays.copyOf(arr, arr.length);

7.3 数组排序

Arrays.sort(arr);

7.4 查找元素(简单遍历或二分查找)

int index = Arrays.binarySearch(arr, 10);

(注意:二分查找前数组必须排序)


8. 多维数组

二维数组声明和创建:

int[][] matrix = new int[3][4];  // 3行4列

// 静态初始化
int[][] matrix2 = {
    {1, 2, 3},
    {4, 5, 6}
};

访问元素:

int val = matrix[1][2];  // 第2行第3列元素

遍历二维数组:

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();
}

9. 数组与集合的区别

维度数组集合(如ArrayList)
长度固定,不可变动态可变
类型同类型元素泛型支持不同类型
操作访问速度快,操作简单支持更多丰富方法,如增删查改
使用场景适合固定大小数据,性能要求高适合动态数据、复杂操作

10. 注意事项与性能建议

  • 数组长度固定,若需要动态大小建议使用集合类
  • 数组越界异常常见,务必确保索引合法
  • 使用增强for循环更简洁,但无法获取索引
  • 多维数组本质是数组的数组,可以是“锯齿形”结构
  • 数组操作多用 java.util.Arrays 类辅助提高效率和简洁度
  • 对大量数据频繁增删操作,集合比数组更合适

附:示例代码完整演示

import java.util.Arrays;

public class ArrayDemo {
    public static void main(String[] args) {
        // 声明并初始化
        int[] arr = {5, 3, 8, 1, 9};

        // 访问元素
        System.out.println("第一个元素:" + arr[0]);

        // 遍历数组
        System.out.println("数组元素:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();

        // 排序
        Arrays.sort(arr);
        System.out.println("排序后数组: " + Arrays.toString(arr));

        // 复制数组
        int[] copy = Arrays.copyOf(arr, arr.length);
        System.out.println("复制的数组: " + Arrays.toString(copy));

        // 多维数组
        int[][] matrix = {
            {1, 2},
            {3, 4},
            {5, 6}
        };
        System.out.println("二维数组元素:");
        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();
        }
    }
}