上一篇
Java如何遍历数组并赋值?
- 后端开发
- 2025-06-01
- 3559
使用for循环遍历数组索引,通过索引为每个元素赋值,示例代码:for (int i=0; i
在Java中,遍历数组并赋值是基础且高频的操作,本文详细讲解6种实现方法,涵盖传统循环到现代API,并提供场景建议和避坑指南。
基础遍历方法
标准for循环
直接通过索引访问并修改元素,效率最高且最灵活。
int[] arr = new int[5]; for (int i = 0; i < arr.length; i++) { arr[i] = i * 2; // 赋值:0, 2, 4, 6, 8 }
while循环
适合动态控制遍历条件,需手动管理索引:
int[] arr = new int[5]; int i = 0; while (i < arr.length) { arr[i] = i + 1; // 赋值:1, 2, 3, 4, 5 i++; }
高级遍历与工具类
Arrays.fill()统一赋值
快速填充相同值(适合初始化):
import java.util.Arrays; int[] arr = new int[5]; Arrays.fill(arr, 10); // 所有元素赋值为10
Arrays.setAll()动态赋值(Java 8+)
通过函数生成值(灵活且简洁):
import java.util.Arrays; int[] arr = new int[5]; Arrays.setAll(arr, index -> index * 3); // 赋值:0, 3, 6, 9, 12
Stream API处理(Java 8+)
函数式编程风格(适合复杂转换):
import java.util.Arrays; import java.util.stream.IntStream; int[] arr = IntStream.range(0, 5) .map(i -> i * 4) .toArray(); // 赋值:0, 4, 8, 12, 16
对象数组的遍历赋值
对象数组需注意引用独立性:
class User { String name; User(String name) { this.name = name; } } User[] users = new User[3]; // 正确:创建新对象赋值 for (int i = 0; i < users.length; i++) { users[i] = new User("User" + i); } // 错误示例:引用共享问题 User temp = new User("Tom"); for (User u : users) { u = temp; // 无效操作!无法修改数组元素 }
避坑指南
-
索引越界(ArrayIndexOutOfBoundsException)
- 错误:
for (int i=0; i<=arr.length; i++)
- 正确:索引范围应为
[0, length-1]
。
- 错误:
-
增强for循环(foreach)的局限性
for (int num : arr) { num = 10; // 修改的是临时变量,不影响原数组 }
原因:
num
是数组元素的拷贝(基本类型)或引用的拷贝(对象类型),无法直接修改数组。 -
空指针风险
未初始化的数组直接遍历会抛出NullPointerException
:int[] arr = null; for (int i=0; i<arr.length; i++) { ... } // 崩溃!
方法对比与选型建议
方法 | 适用场景 | 效率 | 灵活性 |
---|---|---|---|
for 循环 |
通用场景,需索引操作 | ||
Arrays.fill() |
统一初始值 | ||
Arrays.setAll() |
动态生成值(Java 8+) | ||
Stream API |
复杂转换或并行处理(大数据量) | ||
while 循环 |
非固定步长的遍历 |
最佳实践:
- 小数组或需索引操作 → 优先选
for
循环- 统一初始值 →
Arrays.fill()
- Java 8+动态赋值 →
Arrays.setAll()
- 复杂链式处理 →
Stream API
- 基础操作:
for
循环是核心,掌握索引控制和边界条件。 - 高效工具:
Arrays.fill()
和Arrays.setAll()
简化代码。 - 现代开发:Java 8的Stream API适合函数式处理。
- 关键点:避免索引越界,理解值传递与引用传递的区别。
引用说明:
本文代码基于Oracle官方Java 17规范验证,遵循《Java核心技术卷I》数组操作规范,避坑指南参考实际开发中的常见错误案例。