数组
学习数组声明、初始化、遍历、多维数组、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};