数组的遍历
遍历数组是访问每个元素的基本操作。
for循环遍历
基本for循环
使用索引遍历,可读写元素。
Java
int[] arr = {1, 2, 3, 4, 5};
// for循环遍历
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 输出:1, 2, 3, 4, 5
使用索引修改元素
Java
int[] arr = {1, 2, 3, 4, 5};
// for循环可以修改元素
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2; // 每个元素乘2
}
// arr变为:{2, 4, 6, 8, 10}
倒序遍历
Java
int[] arr = {1, 2, 3, 4, 5};
// 从后往前遍历
for (int i = arr.length - 1; i >= 0; i--) {
System.out.println(arr[i]);
}
// 输出:5, 4, 3, 2, 1
遍历部分元素
Java
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
// 遍历前3个元素
for (int i = 0; i < 3; i++) {
System.out.println(arr[i]);
}
// 遍历中间部分
for (int i = 2; i < 6; i++) {
System.out.println(arr[i]); // 输出第2-5个元素
}
增强for循环(for-each)
for-each语法
简化遍历语法,只读访问。
Java
int[] arr = {1, 2, 3, 4, 5};
// for-each遍历
for (int element : arr) {
System.out.println(element);
}
// 输出:1, 2, 3, 4, 5
for-each特点
- 语法简洁:for (类型 变量 : 数组)
- 只读访问:不能修改原数组元素
- 无需索引:自动遍历每个元素
Java
int[] arr = {1, 2, 3};
// for-each不能修改原数组
for (int num : arr) {
num = num * 2; // 只修改num变量,不影响arr
}
// arr仍是:{1, 2, 3}(未改变)
何时使用for-each
- 只需读取元素时
- 不需要索引信息时
- 遍历整个数组时
Java
String[] names = {"张三", "李四", "王五"};
// 适合for-each:只读取
for (String name : names) {
System.out.println(name);
}
while循环遍历
while遍历
Java
int[] arr = {1, 2, 3, 4, 5};
int i = 0;
while (i < arr.length) {
System.out.println(arr[i]);
i++;
}
do-while遍历
Java
int[] arr = {1, 2, 3, 4, 5};
int i = 0;
if (arr.length > 0) { // 确保数组不为空
do {
System.out.println(arr[i]);
i++;
} while (i < arr.length);
}
遍历方式对比
for vs for-each对比
| 特性 | for循环 | for-each |
|---|---|---|
| 索引访问 | 有索引 | 无索引 |
| 修改元素 | 可以 | 不能 |
| 部分遍历 | 可以 | 不支持 |
| 倒序遍历 | 可以 | 不支持 |
| 代码简洁度 | 一般 | 简洁 |
Java
int[] arr = {1, 2, 3, 4, 5};
// for循环:灵活,可修改
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2; // 可修改
System.out.println("索引" + i + ": " + arr[i]); // 有索引
}
// for-each:简洁,只读
for (int num : arr) {
System.out.println(num); // 简洁
}
二维数组遍历
嵌套for循环
Java
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 嵌套for循环遍历
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println(); // 每行结束后换行
}
// 输出:
// 1 2 3
// 4 5 6
// 7 8 9
嵌套for-each
Java
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 嵌套for-each
for (int[] row : matrix) {
for (int element : row) {
System.out.print(element + " ");
}
System.out.println();
}
不规则二维数组遍历
Java
int[][] arr = {
{1, 2},
{3, 4, 5},
{6, 7, 8, 9}
};
// 每行长度不同
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
Arrays工具类遍历
Arrays.toString输出
Java
import java.util.Arrays;
int[] arr = {1, 2, 3, 4, 5};
// 快速输出数组内容
System.out.println(Arrays.toString(arr));
// 输出:[1, 2, 3, 4, 5]
Arrays.deepToString二维数组
Java
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(Arrays.deepToString(matrix));
// 输出:[[1, 2, 3], [4, 5, 6]]
遍历应用示例
查找最大值
Java
int[] arr = {3, 7, 2, 9, 5};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("最大值: " + max); // 9
查找元素位置
Java
int[] arr = {10, 20, 30, 40, 50};
int target = 30;
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
index = i;
break; // 找到后退出
}
}
System.out.println("位置: " + index); // 2
求和统计
Java
int[] arr = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : arr) {
sum += num;
}
System.out.println("总和: " + sum); // 15
System.out.println("平均: " + (sum / arr.length)); // 3
元素计数
Java
int[] arr = {1, 2, 3, 2, 4, 2, 5};
int target = 2;
int count = 0;
for (int num : arr) {
if (num == target) {
count++;
}
}
System.out.println("出现次数: " + count); // 3
遍历最佳实践
空数组检查
Java
int[] arr = null;
// 安全遍历
if (arr != null && arr.length > 0) {
for (int num : arr) {
System.out.println(num);
}
}
选择合适方式
Java
// 只读:for-each简洁
for (int num : arr) {
System.out.println(num);
}
// 需修改/索引:for循环
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2;
System.out.println("索引" + i);
}
// 快速输出:Arrays.toString
System.out.println(Arrays.toString(arr));
要点总结
- for循环:有索引,可修改,支持部分/倒序遍历
- for-each:无索引,只读,简洁
- while循环:灵活控制遍历条件
- 二维数组使用嵌套循环遍历
- Arrays.toString快速输出数组内容
- Arrays.deepToString输出二维数组
- 需修改元素用for循环
- 只读遍历用for-each
- 需要索引信息用for循环
- 遍历前检查数组是否为null或空
📝 发现内容有误?点击此处直接编辑