选迭代器还是普通for循环取决于是否需删除元素或使用下标:需边遍历边删→用迭代器(安全且通用);需下标或随机访问→普通for(仅适用于arraylist等o(1)随机访问实现)。

选迭代器还是普通 for 循环,关键看两点:要不要删元素、需不需要下标。
需要在遍历中安全删除元素 → 用迭代器
普通 for 循环里调 list.remove() 或直接修改集合,几乎一定会触发 ConcurrentModificationException。迭代器的 remove() 方法是唯一被设计为“边遍历边删”的安全方式。
- 必须先调
next(),再调remove(),否则抛IllegalStateException - 每次
remove()只能删刚取出来的那个元素,不能重复调 - 对
ArrayList和LinkedList都适用,行为一致
需要按索引操作或随机访问 → 普通 for 循环(但仅限 ArrayList 等支持随机访问的实现)
如果逻辑依赖下标(比如只处理偶数位元素、前后元素对比、构建索引映射),普通 for 循环最直接。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
ArrayList的get(i)是 O(1),用普通 for 效率高 -
LinkedList的get(i)是 O(n),普通 for 会退化成 O(n²),务必避免 - 不确定集合具体类型时,优先用迭代器或增强 for,更稳妥
其他常见情况参考
如果只是简单读取全部元素,增强 for(for-each)通常比手动写迭代器更简洁;如果要处理 HashMap 的键值对,普通 for 循环得配合 entrySet() 转成列表,反而不如迭代器或增强 for 直观。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










