java增强for循环适用于实现iterable接口的集合,不支持map直接遍历;变量类型须匹配元素类型;遍历时不可修改集合结构;不提供索引,无法反向或跳过遍历。

Java 增强 for 循环(也叫 foreach)是遍历集合最简洁的方式,但它有明确的适用范围和使用边界。只要集合实现了 Iterable 接口(比如 ArrayList、LinkedList、HashSet、TreeSet 等),就能直接用。
能遍历哪些集合?
✅ 支持所有标准集合实现:
-
List<string> list = new ArrayList();</string>→for (String s : list) -
Set<integer> set = new HashSet();</integer>→for (int i : set) -
Queue<double> queue = new LinkedList();</double>→for (Double d : queue)
❌ 不支持 Map 本身(因为 Map 没实现 Iterable),但可以转成可迭代结构:
- 遍历键:
for (K key : map.keySet()) - 遍历值:
for (V value : map.values()) - 遍历键值对:
for (Map.Entry<k> e : map.entrySet())</k>
变量类型必须匹配元素实际类型
编译器不做宽泛推导,类型不兼容会直接报错:
-
String[] arr = {"a", "b"};→for (Object o : arr)✅(Object是String的父类) -
for (int i : arr)❌(String不能转成int) -
Integer[] nums = {1, 2, null};→for (int n : nums)运行时可能抛NullPointerException
遍历时不能修改集合结构
这是最关键的限制:在循环体内调用 add()、remove()、clear() 等方法,会立即触发 ConcurrentModificationException —— 即使是单线程。
- 错误示例:
for (String s : list) { if ("x".equals(s)) list.remove(s); } - 正确做法:改用
Iterator删除:Iterator<string> it = list.iterator(); while (it.hasNext()) { String s = it.next(); if ("x".equals(s)) it.remove(); }</string> - 想添加元素?先收集到临时集合,循环结束后再
addAll()
它不提供索引,也不支持跳过或反向
增强 for 只适合“顺序读取每个元素”的场景:
- 需要下标(比如“只处理偶数位置的元素”)→ 用传统
for (int i = 0; i - 需要从后往前遍历 → 用传统 for 或
Collections.reverse()配合增强 for - 需要根据条件提前退出多层嵌套?增强 for 仍可用
break或return,但无法continue到外层
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











