1.数组的核心特点
- 长度固定:一旦创建,长度不可改变。
- 类型统一:所有元素的数据类型必须相同。
- 连续内存:数组在内存中是一块连续空间,通过索引(下标)快速访问。
- 索引从 0 开始:第一个元素索引为 0,最后一个为
length - 1。
2. 声明与创建
int[] arr = new int[5]; // 创建一个长度为5的int数组,元素默认值0
int[] arr = {1, 2, 3, 4, 5}; // 简化写法
int[] arr2 = new int[]{1, 2, 3, 4, 5}; // 完整写法
3.数组长度与元素访问
- 获取长度:
数组名.length - 访问元素:
数组名[索引] - 修改元素:
数组名[索引] = 新值
int[] scores = new int[3];
scores[0] = 90;
scores[1] = 85;
scores[2] = 92;
System.out.println("长度:" + scores.length); // 3
System.out.println("第二个元素:" + scores[1]); // 85
4. 遍历数组
int[] nums = {10, 20, 30};
//普通 for 循环
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
//增强 for 循环(for-each)
//for-each 只能读取元素,不能修改数组元素的值。
for (int n : nums) {
System.out.println(n);
}
//使用 Arrays.toString() 快速打印
import java.util.Arrays;
System.out.println(Arrays.toString(nums)); // 输出 [10, 20, 30]
5. 多维数组
// 3行4列的矩阵
int[][] matrix = new int[3][4];
// 静态初始化
int[][] matrix2 = {
{1, 2, 3},
{4, 5, 6}
};
// 不规则数组(每行长度可以不同)
int[][] ragged = new int[2][];
ragged[0] = new int[3];
ragged[1] = new int[5];
//遍历二维数组
for (int i = 0; i < matrix2.length; i++) {
for (int j = 0; j < matrix2[i].length; j++) {
System.out.print(matrix2[i][j] + " ");
}
System.out.println();
}
6.数组的常用操作
| 方法 | 作用 |
|---|---|
Arrays.sort(arr) | 升序排序 |
Arrays.binarySearch(arr, key) | 二分查找(要求已排序) |
Arrays.fill(arr, value) | 将数组所有元素填充为同一个值 |
Arrays.copyOf(arr, newLength) | 复制数组,可截断或填充默认值 |
Arrays.equals(arr1, arr2) | 比较两个数组内容是否相等 |
int[] arr = {5, 2, 8, 1};
//升序排序
Arrays.sort(arr); // arr = [1, 2, 5, 8]
System.out.println(Arrays.toString(arr));
//二分查找(要求已排序)
int key = 8;
System.out.println(Arrays.binarySearch(arr, key)); //返回的是下标 3
//将数组所有元素填充为同一个值
Arrays.fill(arr, 0); // arr = [0, 0, 0, 0]
System.out.println(Arrays.toString(arr));
int[] a = {5, 2, 8, 1};
//复制数组,可截断或填充默认值
int [] b =Arrays.copyOf(a, 8);
int [] c =Arrays.copyOf(a, 2);
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(c));
int[] d = {5, 2, 8, 1};
//比较两个数组内容是否相等
System.out.println(Arrays.equals(a,b));
System.out.println(Arrays.equals(a,d));
7.异常
//数组越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
arr[2] = 10; // 错误!最大索引是 1
//空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr.length); // 错误!arr 未引用任何对象
8.可变参数
本质上就是数组
public static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
// 调用
int result = sum(1, 2, 3, 4); // numbers 被包装为 int[]{1,2,3,4}