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