Z
ZHANK

数组

学习数组声明、初始化、遍历、多维数组、Arrays 工具类

数组

数组是固定长度的同类型数据容器——创建后大小不可变。如果你需要动态增减元素,应该用 ArrayList

学完本章你将: 掌握数组声明/初始化、遍历、Arrays 工具类、多维数组。


声明与初始化

java
// 静态初始化:已知元素
int[] scores = {90, 85, 92, 78};
String[] names = {"Alice", "Bob", "Charlie"};

// 动态初始化:知道长度,元素后填
int[] nums = new int[5];           // 5个元素,默认 0
String[] strs = new String[3];     // 3个元素,默认 null

// 先声明后赋值
double[] prices;
prices = new double[]{9.9, 19.9, 29.9};

💡 数组 vs ArrayList: 数组长度固定,速度快,存基本类型不装箱。ArrayList 动态扩容,有丰富的 API。日常开发优先用 ArrayList,性能敏感或固定大小场景用数组。


访问与遍历

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

arr[0];          // 10 —— 索引从 0 开始
arr.length;      // 5  —— 长度是属性,不是方法
arr[2] = 99;     // 修改

// 三种遍历方式
for (int i = 0; i < arr.length; i++) { }  // 需要索引时
for (int n : arr) { }                      // 只读遍历,最简洁
Arrays.stream(arr).forEach(System.out::println); // Stream 方式

// 快速打印
System.out.println(Arrays.toString(arr)); // [10, 20, 99, 40, 50]

Arrays 工具类

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

Arrays.sort(arr);                              // 原地排序
int idx = Arrays.binarySearch(arr, 5);         // 二分查找(必须先排序!)
int[] copy = Arrays.copyOf(arr, arr.length);   // 复制(可指定新长度)
int[] range = Arrays.copyOfRange(arr, 1, 4);   // 范围复制 [1,4)
Arrays.equals(arr, copy);                      // 逐元素比较
Arrays.fill(new int[5], -1);                   // 填充 [-1,-1,-1,-1,-1]

多维数组 —— 数组的数组

Java 没有真正的多维数组,所谓二维数组其实是"数组的数组"——int[][] 每个元素是一个 int[]

java
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
};
System.out.println(matrix[1][2]); // 6 —— 第二行第三列

// 不规则数组:每行长度可以不同
int[][] jagged = new int[3][];
jagged[0] = new int[]{1, 2};
jagged[1] = new int[]{3, 4, 5};
jagged[2] = new int[]{6};

// 不规则数组 int[][] jagged = new int[3][]; jagged[0] = new int[]{1, 2}; jagged[1] = new int[]{3, 4, 5}; jagged[2] = new int[]{6};