Java对象如何高效循环遍历?
- 后端开发
- 2025-06-11
- 7
传统for循环(索引访问)
适用场景:数组或实现了RandomAccess接口的集合(如ArrayList),通过索引直接访问元素效率高。
局限性:不适用于Set、LinkedList等无索引集合。
增强for循环(foreach)
适用场景:所有实现Iterable接口的集合(如List、Set、Queue)及数组,代码简洁,避免索引越界风险。
注意:遍历时不能直接修改集合结构(如删除元素)。
Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3)); for (Integer num : set) { System.out.println(num); // 输出:1, 2, 3(顺序可能不同) }
迭代器(Iterator)
适用场景:需在遍历中安全删除元素时使用,支持所有Collection实现类。
核心方法:

- hasNext():检查是否还有元素
- next():获取下一个元素
- remove():删除当前元素(唯一安全方式) List<String> fruits = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry")); Iterator<String> iterator = fruits.iterator(); while (iterator.hasNext()) { String fruit = iterator.next(); if (fruit.startsWith("B")) { iterator.remove(); // 安全删除"Banana" } } // 结果:fruits = ["Apple", "Cherry"]
Java 8+ forEach() + Lambda
适用场景:简化代码,结合Stream API实现过滤、映射等复杂操作。
优势:函数式编程风格,可并行处理数据。

List<String> languages = Arrays.asList("Java", "Python", "C++"); // 直接遍历 languages.forEach(lang -> System.out.println(lang)); // 结合Stream过滤 languages.stream() .filter(lang -> lang.length() > 3) .forEach(System.out::println); // 输出:Java, Python
ListIterator(双向遍历)
适用场景:需双向遍历或修改List集合时使用(支持add()、set())。
特性:可向前/向后遍历,获取索引位置。
List<Integer> numbers = new ArrayList<>(Arrays.asList(10, 20, 30)); ListIterator<Integer> listIterator = numbers.listIterator(); // 正向遍历 while (listIterator.hasNext()) { int idx = listIterator.nextIndex(); int num = listIterator.next(); if (num == 20) { listIterator.set(25); // 修改当前元素:20 → 25 } } // 反向遍历 while (listIterator.hasPrevious()) { System.out.println(listIterator.previous()); // 输出:30, 25, 10 }
最佳实践总结
| 方法 | 适用场景 | 线程安全 | 修改集合 |
|---|---|---|---|
| 传统for循环 | 数组/ArrayList(索引访问) | 否 | 需谨慎(可能报错) |
| 增强for循环 | 快速遍历(无需修改结构) | 否 | 不支持 |
| Iterator | 遍历中删除元素(推荐) | 否 | 支持remove() |
| forEach()+Lambda | 函数式处理/链式操作 | 否 | 不支持 |
| ListIterator | List双向遍历/修改元素 | 否 | 支持set()/add() |
关键建议:
- 优先使用增强for循环或forEach() 简化代码。
- 需删除元素时必用Iterator 避免ConcurrentModificationException。
- 大数据量或复杂操作考虑Stream API(如并行流parallelStream())。
引用说明
- Oracle官方文档:The Java™ Tutorials – Collections
- Joshua Bloch, Effective Java(条目47:优先使用Collection而非数组)
- Java SE 17 API规范:Iterable, Iterator
通过正确选择循环方式,可编写出高效、易维护的Java代码,实际开发中需结合数据规模、线程安全和操作需求综合判断。
