增强for循环最常用,适合只读遍历且语法简洁;传统for循环适用于需索引的场景,可安全访问元素并控制边界。

Java 中遍历 ArrayList 有多种常用方式,选择哪种取决于你的具体需求:是否需要索引、是否要修改集合、是否追求代码简洁或性能最优。
使用增强 for 循环(最常用)
适合只读遍历,语法简洁、不易出错,是日常开发中最推荐的方式。
- 不能直接获取元素下标,如需索引得额外定义计数器
- 遍历时不能调用 remove() 或 add(),否则抛 ConcurrentModificationException
- 示例:
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));<br>for (String item : list) {<br> System.out.println(item);<br>}
使用传统 for 循环(带索引)
当你需要知道当前元素的位置(比如做条件判断、拼接字符串、计算位置相关逻辑)时,这种写法最直接。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 通过 get(i) 按索引访问,安全且高效
- 可配合 size() 控制边界,避免越界
- 示例:
for (int i = 0; i < list.size(); i++) {<br> System.out.println("索引 " + i + ": " + list.get(i));<br>}
使用 Iterator 迭代器(支持安全删除)
唯一能在遍历过程中安全删除元素的方式,适用于边查边删的场景(如过滤掉某些值)。
立即学习“Java免费学习笔记(深入)”;
- 必须用 iterator.remove() 删除,不能用 list.remove()
- 支持 hasNext() 和 next(),逻辑清晰可控
- 示例:
Iterator<String> it = list.iterator();<br>while (it.hasNext()) {<br> String item = it.next();<br> if ("b".equals(item)) {<br> it.remove(); // 安全删除<br> }<br>}
使用 forEach() 方法(Java 8+ 函数式风格)
适合简单操作,代码更函数化,可结合 Lambda 表达式或方法引用。
- 本质是内部调用 Iterator,同样不支持遍历时修改集合
- 写法简洁,语义明确,例如打印全部元素:
list.forEach(System.out::println);
- 也可写成 Lambda:
list.forEach(item -> {<br> if (item.length() > 1) {<br> System.out.println("长字符串: " + item);<br> }<br>});

















