Java遍历ArrayList有多种方式:普通for循环适合需索引的场景,可修改元素但不可增删;增强for循环简洁安全,但无法获取索引且不能修改集合;Lambda forEach适用于JDK8+的函数式操作。

Java 中遍历 ArrayList 有多种常用方式,选择哪种取决于具体需求,比如是否需要索引、是否要修改集合、是否追求代码简洁或性能最优。
普通 for 循环(适合需要下标的操作)
通过 size() 获取长度,用索引逐个访问元素。适用于需同时使用元素值和位置的场景,比如替换指定位置的元素、做下标相关计算。
- 写法清晰,兼容所有 JDK 版本
- 支持在循环中修改集合(如 set(i, newValue)),但不能增删元素(否则可能越界或跳过元素)
- 示例:for (int i = 0; i
增强 for 循环(最常用,代码简洁)
语法为 for (Type item : list),底层调用迭代器,自动处理遍历逻辑。适合只读遍历,语义清晰,不易出错。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不能直接获取当前索引,也不支持在遍历时修改原集合(会抛 ConcurrentModificationException)
- 如果确实需要索引,可配合外部计数器变量(但不推荐,易出错)
- 示例:for (String s : list) { System.out.println(s); }
使用 Iterator(适合边遍历边删除)
Iterator 提供 hasNext() 和 next() 方法,还支持安全删除——调用 remove() 不会引发并发修改异常。
立即学习“Java免费学习笔记(深入)”;
- 唯一推荐用于“遍历中删除元素”的方式
- 注意:必须先调用 next() 才能调用 remove(),且每个 next() 最多调用一次 remove()
- 示例:Iterator
it = list.iterator(); while (it.hasNext()) { String s = it.next(); if (s.isEmpty()) it.remove(); }
Java 8+ 的 forEach + Lambda(函数式风格)
调用 list.forEach(System.out::println) 或自定义 Lambda 表达式,语义直观,适合简单消费操作。
- 本质是内部使用 Iterator,因此同样不支持遍历时修改集合
- 无法中断循环(没有 break),如需提前退出建议改用传统 for 或手写循环
- 示例:list.forEach(s -> { if (s.length() > 5) System.out.println(s); });

















