增强for循环是遍历集合最简洁安全的方式,专为数组和iterable集合设计,底层调用iterator,适用于只读操作;传统for循环适合需索引的场景;iterator是遍历时安全删除的唯一合规方式;并行流适用于大数据量无状态只读操作。

增强for循环:遍历集合最简洁安全的方式
增强for循环(for-each)专为遍历数组和实现了Iterable接口的集合设计,语法清晰、不易出错。它底层调用Iterator,自动处理迭代逻辑,省去索引管理与边界检查。
适用场景包括打印元素、校验值、聚合计算等只读操作。例如:
-
遍历List:
for (String s : list) { System.out.println(s); } - 遍历Set或Map.values():无需关心插入顺序,代码一致
-
避免越界风险:不暴露索引,天然规避
IndexOutOfBoundsException
传统for循环:需要索引或随机访问时的首选
当操作依赖下标(如修改特定位置元素、前后元素比较、构建新索引结构),传统for循环更直接高效。尤其对ArrayList这类基于数组的集合,通过get(i)访问是O(1)时间复杂度。
注意性能细节:
OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。
- 把
list.size()缓存到局部变量中,避免每次循环都重复调用 - 对LinkedList慎用
get(i)——它会从头/尾遍历,导致O(n²)开销 - 若需边遍历边删除,不能直接用
list.remove(i),否则引发ConcurrentModificationException
Iterator遍历:安全修改集合的唯一合规方式
在遍历过程中要删除元素,必须使用Iterator。这是Java集合框架明确规定的线程安全(单线程下)且语义正确的做法。
典型模式:
- 获取迭代器:
Iterator<string> it = list.iterator();</string> - 循环中调用
it.hasNext()和it.next() - 满足条件时调用
it.remove(),该方法仅移除上一次next()返回的元素 - 禁止在循环体中调用
list.remove(...)或list.add(...)
并行流:大数据量只读遍历时的性能加速选项
当集合元素数量大(如数万以上)、操作无状态且CPU密集(如字符串解析、数值转换),可考虑collection.parallelStream().forEach(...)。
但要注意限制:
- 不保证执行顺序,不适合有依赖关系的操作
- 小数据集反而因线程调度开销变慢
- 若操作涉及共享变量(如累加器),必须用线程安全方式(如
AtomicInteger或reduce) - 无法在parallelStream中安全调用
remove等结构性修改方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










