当前位置:首页 > 后端开发 > 正文

Java如何遍历数组并赋值?

使用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()统一赋值

快速填充相同值(适合初始化):

Java如何遍历数组并赋值?  第1张

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; //  无效操作!无法修改数组元素
}

避坑指南

  1. 索引越界(ArrayIndexOutOfBoundsException)

    • 错误:for (int i=0; i<=arr.length; i++)
    • 正确:索引范围应为 [0, length-1]
  2. 增强for循环(foreach)的局限性

    for (int num : arr) {
        num = 10; //  修改的是临时变量,不影响原数组
    }

    原因num是数组元素的拷贝(基本类型)或引用的拷贝(对象类型),无法直接修改数组。

  3. 空指针风险
    未初始化的数组直接遍历会抛出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》数组操作规范,避坑指南参考实际开发中的常见错误案例。

0