Java 中的 for-each 循环(for loop with :)
简介
在 Java 编程中,for-each
循环(即 for loop with :
)是一种强大且简洁的遍历数组和集合的方式。它为开发者提供了一种更紧凑、易读的语法来迭代数据结构中的元素,尤其适用于不需要访问元素索引的场景。
目录
- 基础概念
- 使用方法
- 遍历数组
- 遍历集合
- 常见实践
- 计算数组元素之和
- 打印集合中的元素
- 最佳实践
- 避免在
for-each
循环中修改集合 - 结合
Optional
使用
- 避免在
- 小结
- 参考资料
基础概念
for-each
循环,也称为增强型 for
循环,是 Java 5.0 引入的语法糖。它简化了对数组和实现了 Iterable
接口的集合类(如 List
、Set
)的遍历过程。其基本语法结构如下:
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
循环来处理数据。