arraylist 可直接用 for-each 循环遍历,前提是元素类型明确、不修改集合且仅读取元素;其语法简洁、自动迭代,但遍历时调用 remove() 或 add() 会抛 concurrentmodificationexception。

Java 中 ArrayList 可以直接用 for-each 循环遍历,前提是元素类型明确、不需修改集合本身(如删除或插入),且只需读取每个元素的值。
for-each 循环的基本写法
语法简洁,自动迭代,无需索引或 Iterator。适用于只读场景:
- 声明一个与 ArrayList 元素类型一致的变量(如 String、Integer)
- 用冒号连接变量名和 ArrayList 对象名
- 循环体中直接使用该变量访问当前元素
示例:
Listlist.add("苹果");
list.add("香蕉");
list.add("橙子");
for (String fruit : list) {
System.out.println(fruit);
}
注意事项:不能在遍历时修改 ArrayList
for-each 是基于 Iterator 实现的,若在循环中调用 list.remove() 或 list.add(),会触发 ConcurrentModificationException 异常。
- 需要边遍历边删除?改用显式 Iterator 的 remove() 方法
- 需要按索引操作?改用传统 for 循环(for (int i = 0; i )
- 只是过滤后生成新列表?可用 Stream API(如 list.stream().filter(...).collect(...))
泛型类型必须匹配
for-each 变量类型必须与 ArrayList 声明的泛型类型一致,否则编译报错:
// 正确List
for (int n : nums) { ... } // int 自动拆箱,合法
// 错误:类型不兼容
// for (String s : nums) { ... } // 编译失败
for-each 与传统 for 循环怎么选?
看需求:
- 只读每个元素 → 优先用 for-each,代码清晰、不易越界
- 需要当前索引(如打印第几个元素)→ 用传统 for 循环
- 要跳过某些元素或反向遍历 → 传统 for 更灵活
- 遍历同时修改结构 → 避免 for-each,用 Iterator 或倒序 for
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











