跳转至

Java 中的 for-each 循环(for loop with :)

简介

在 Java 编程中,for-each 循环(即 for loop with :)是一种强大且简洁的遍历数组和集合的方式。它为开发者提供了一种更紧凑、易读的语法来迭代数据结构中的元素,尤其适用于不需要访问元素索引的场景。

目录

  1. 基础概念
  2. 使用方法
    • 遍历数组
    • 遍历集合
  3. 常见实践
    • 计算数组元素之和
    • 打印集合中的元素
  4. 最佳实践
    • 避免在 for-each 循环中修改集合
    • 结合 Optional 使用
  5. 小结
  6. 参考资料

基础概念

for-each 循环,也称为增强型 for 循环,是 Java 5.0 引入的语法糖。它简化了对数组和实现了 Iterable 接口的集合类(如 ListSet)的遍历过程。其基本语法结构如下:

for (elementType element : collectionOrArray) {
    // 执行操作
}

其中,elementType 是集合或数组中元素的类型,element 是一个临时变量,用于存储当前迭代的元素,collectionOrArray 是要遍历的集合或数组。

使用方法

遍历数组

public class ArrayForEachExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

在上述代码中,for-each 循环遍历 numbers 数组,每次迭代将数组中的一个元素赋值给 number 变量,并打印出来。

遍历集合

import java.util.ArrayList;
import java.util.List;

public class ListForEachExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

这里,for-each 循环遍历 fruits 列表,将每个水果名称打印出来。

常见实践

计算数组元素之和

public class SumArrayExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
        System.out.println("数组元素之和为: " + sum);
    }
}

在这个例子中,我们使用 for-each 循环遍历 numbers 数组,并将每个元素累加到 sum 变量中。

打印集合中的元素

import java.util.Set;
import java.util.TreeSet;

public class PrintSetExample {
    public static void main(String[] args) {
        Set<Integer> numbers = new TreeSet<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(2);

        for (Integer number : numbers) {
            System.out.println(number);
        }
    }
}

此代码通过 for-each 循环遍历 TreeSet 集合,并打印其中的元素。

最佳实践

避免在 for-each 循环中修改集合

for-each 循环中直接修改集合(添加或删除元素)会导致 ConcurrentModificationException 异常。如果需要修改集合,建议使用迭代器或 Stream API

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ModifyListExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // 使用迭代器删除元素
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            int number = iterator.next();
            if (number % 2 == 0) {
                iterator.remove();
            }
        }
        System.out.println(numbers);
    }
}

结合 Optional 使用

当遍历可能包含 null 元素的集合时,结合 Optional 可以避免 NullPointerException

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class OptionalForEachExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Alice");
        names.add(null);
        names.add("Bob");

        for (String name : names) {
            Optional.ofNullable(name).ifPresent(System.out::println);
        }
    }
}

小结

for-each 循环为 Java 开发者提供了一种简洁、易读的方式来遍历数组和集合。它在不需要访问元素索引的场景下表现出色,但在使用时需要注意一些细节,如避免在循环中修改集合。通过遵循最佳实践,我们可以更高效、安全地使用 for-each 循环来处理数据。

参考资料