跳转至

数组类型及操作

Java中的数组是一种固定长度的、存储相同类型元素的数据结构,是Java中最基本的数据集合类型。

作用

数组在Java中具有重要作用:

  1. 存储大量同类型数据
  2. 提供快速随机访问能力
  3. 作为其他数据结构的基础
  4. 用于实现各种算法
  5. 处理批量数据操作

例子

public class ArrayDemo {
    public static void main(String[] args) {
        // 数组声明和初始化
        int[] numbers = {10, 20, 30, 40, 50};

        // 访问数组元素
        System.out.println("第一个元素: " + numbers[0]);  // 10
        System.out.println("数组长度: " + numbers.length); // 5

        // 遍历数组
        System.out.println("数组元素:");
        for(int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }

        // 增强for循环
        System.out.println("使用增强for循环:");
        for(int num : numbers) {
            System.out.println(num);
        }

        // 多维数组
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        System.out.println("矩阵对角线:");
        for(int i = 0; i < matrix.length; i++) {
            System.out.println(matrix[i][i]);
        }

        // 数组操作
        int[] arr = new int[5];
        arr[0] = 100;  // 赋值
        int value = arr[0];  // 取值
        arr[1] = arr[0] * 2;  // 计算

        // 数组工具类
        java.util.Arrays.sort(arr);  // 排序
        int index = java.util.Arrays.binarySearch(arr, 100);  // 二分查找
        System.out.println("100的位置: " + index);
    }
}

详细说明

Java数组的主要特性:

  1. 基本特性:

    • 固定长度,创建后不可改变
    • 索引从0开始
    • 存储相同类型的元素
    • 内存连续分配
  2. 数组操作:

    • 创建:new关键字或字面量
    • 访问:使用索引
    • 遍历:for循环或增强for循环
    • 长度:length属性
  3. 多维数组:

    • 二维数组:数组的数组
    • 不规则数组:每行长度可以不同
    • 访问:使用多个索引
  4. 数组工具类:

    • 排序:Arrays.sort()
    • 查找:Arrays.binarySearch()
    • 比较:Arrays.equals()
    • 填充:Arrays.fill()
    • 复制:Arrays.copyOf()

注意事项

  1. 数组下标从0开始,访问越界会抛出ArrayIndexOutOfBoundsException
  2. 数组长度固定,需要动态大小请使用ArrayList
  3. 数组是对象,但存储基本类型时会自动装箱
  4. 多维数组实际上是数组的数组
  5. 数组可以使用Arrays类提供的工具方法进行排序、搜索等操作
// 展示数组的浅拷贝和深拷贝问题
public class ArrayCopyDemo {
    public static void main(String[] args) {
        // 创建一个数组
        int[] originalArray = {1, 2, 3, 4, 5};

        // 浅拷贝:直接赋值
        int[] shallowCopy = originalArray;
        shallowCopy[0] = 10;
        System.out.println("原数组第一个元素(浅拷贝后): " + originalArray[0]); // 输出10

        // 深拷贝:使用Arrays.copyOf()
        int[] deepCopy = java.util.Arrays.copyOf(originalArray, originalArray.length);
        deepCopy[0] = 20;
        System.out.println("原数组第一个元素(深拷贝后): " + originalArray[0]); // 输出10
        System.out.println("深拷贝数组第一个元素: " + deepCopy[0]); // 输出20
    }
}