Java 数组
数组是存储相同类型数据的连续内存空间。Java 中的数组是对象,提供了高效的数据存储和访问方式。理解数组的使用是处理批量数据的基础。
一维数组与多维数组
一维数组
声明方式:
// 方式 1:声明后初始化
int[] arr;
arr = new int[5];
// 方式 2:声明并初始化
int[] arr = new int[5];
// 方式 3:直接初始化
int[] arr = {1, 2, 3, 4, 5};
// 方式 4:声明时指定大小
int[] arr = new int[]{1, 2, 3, 4, 5};
访问元素:
int[] arr = {1, 2, 3, 4, 5};
// 访问第一个元素(索引从 0 开始)
int first = arr[0]; // 1
// 访问最后一个元素
int last = arr[arr.length - 1]; // 5
// 修改元素
arr[0] = 10; // arr = {10, 2, 3, 4, 5}
数组长度:
int[] arr = {1, 2, 3, 4, 5};
int length = arr.length; // 5(注意:length 是属性,不是方法)
多维数组
二维数组:
// 方式 1:声明并分配空间
int[][] matrix = new int[3][4]; // 3 行 4 列
// 方式 2:直接初始化
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 方式 3:不规则数组
int[][] matrix = new int[3][];
matrix[0] = new int[2];
matrix[1] = new int[3];
matrix[2] = new int[4];
访问二维数组:
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
int value = matrix[1][2]; // 6(第 2 行第 3 列)
// 获取行数和列数
int rows = matrix.length; // 3
int cols = matrix[0].length; // 3
三维数组:
int[][][] cube = new int[3][4][5]; // 3 层 4 行 5 列
// 访问
int value = cube[0][1][2];
数组初始化与访问
数组初始化
1. 默认初始化
// 数值类型:初始化为 0
int[] arr = new int[5]; // {0, 0, 0, 0, 0}
// 布尔类型:初始化为 false
boolean[] flags = new boolean[3]; // {false, false, false}
// 引用类型:初始化为 null
String[] names = new String[3]; // {null, null, null}
2. 显式初始化
// 一维数组
int[] arr = {1, 2, 3, 4, 5};
// 二维数组
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
// 不规则数组
int[][] jagged = {
{1, 2},
{3, 4, 5},
{6, 7, 8, 9}
};
3. 循环初始化
// 初始化一维数组
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1; // {1, 2, 3, 4, 5}
}
// 初始化二维数组
int[][] matrix = new int[3][4];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = i * matrix[i].length + j + 1;
}
}
数组访问
1. 读取元素
int[] arr = {10, 20, 30, 40, 50};
// 访问单个元素
int value = arr[2]; // 30
// 遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 使用增强 for 循环
for (int num : arr) {
System.out.println(num);
}
2. 修改元素
int[] arr = {1, 2, 3, 4, 5};
// 修改单个元素
arr[0] = 10; // {10, 2, 3, 4, 5}
// 批量修改
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2; // 每个元素乘以 2
}
3. 数组边界
int[] arr = {1, 2, 3};
// ✅ 有效索引:0 到 arr.length - 1
int first = arr[0]; // 1
int last = arr[arr.length - 1]; // 3
// ❌ 错误:数组越界
// int invalid = arr[3]; // ArrayIndexOutOfBoundsException
// int negative = arr[-1]; // ArrayIndexOutOfBoundsException
数组常用工具(Arrays 类)
java.util.Arrays 提供了操作数组的静态方法。
1. 数组排序
import java.util.Arrays;
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6};
// 排序(升序)
Arrays.sort(arr); // {1, 1, 2, 3, 4, 5, 6, 9}
// 部分排序
int[] arr2 = {3, 1, 4, 1, 5, 9, 2, 6};
Arrays.sort(arr2, 0, 4); // 只排序前 4 个元素
2. 数组查找
int[] arr = {1, 2, 3, 4, 5};
// 二分查找(数组必须已排序)
int index = Arrays.binarySearch(arr, 3); // 2
// 未找到返回负数
int notFound = Arrays.binarySearch(arr, 6); // -6
3. 数组比较
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 4};
// 比较数组内容
boolean equal = Arrays.equals(arr1, arr2); // true
boolean notEqual = Arrays.equals(arr1, arr3); // false
4. 数组填充
int[] arr = new int[5];
// 填充所有元素
Arrays.fill(arr, 10); // {10, 10, 10, 10, 10}
// 填充部分元素
int[] arr2 = new int[5];
Arrays.fill(arr2, 1, 3, 20); // {0, 20, 20, 0, 0}
5. 数组转字符串
int[] arr = {1, 2, 3};
// 转字符串
String str = Arrays.toString(arr); // "[1, 2, 3]"