java增强for循环专用于遍历数组和iterable集合,不支持普通对象或map本身;可遍历数组、collection及map的keyset/values/entryset;不能修改结构,无法获取索引。

Java 中的增强 for 循环(也叫 foreach)语法简洁,专用于遍历数组和实现了 Iterable 接口的集合(如 ArrayList、HashSet、LinkedList 等),不能直接用于普通对象或 Map 本身(但可遍历其 keySet、values 或 entrySet)。
遍历一维数组
支持基本类型数组(int[]、String[] 等)和引用类型数组。语法为:for (元素类型 变量名 : 数组名)。
- 变量类型必须与数组元素类型一致(或存在自动装箱/拆箱,如
int和Integer) - 不能在循环中修改数组长度,也不能通过该变量修改原数组元素(对基本类型无效;对引用类型可调用对象方法,但不能让变量指向新对象来改变原数组内容)
示例:
int[] nums = {1, 2, 3};
for (int n : nums) {
System.out.println(n); // 输出 1, 2, 3
}
遍历 Collection 集合
适用于所有实现 Iterable 的集合类,包括 ArrayList、LinkedList、HashSet、TreeSet 等。
- 变量类型需与集合泛型类型匹配(如
ArrayList<string></string>对应String s) - 遍历时不能直接删除集合元素(会抛
ConcurrentModificationException),如需删除,请用迭代器的remove()方法 - 可以安全地修改当前元素对象的内部状态(比如调用
user.setName("new")),但不能用=赋值替换引用
示例:
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "c"));
for (String s : list) {
System.out.println(s.toUpperCase()); // 输出 A, B, C
}</string>
遍历 Map 的几种常用方式
Map 本身不实现 Iterable,但可通过其视图方法获得可遍历结构:
-
keySet()→ 遍历所有键:for (K key : map.keySet()) -
values()→ 遍历所有值:for (V value : map.values()) -
entrySet()→ 遍历键值对(最常用,避免重复查值):for (Map.Entry<k> entry : map.entrySet())</k>
示例:
Map<string integer> map = new HashMap();
map.put("Alice", 25);
map.put("Bob", 30);
for (Map.Entry<string integer> e : map.entrySet()) {
System.out.println(e.getKey() + " → " + e.getValue());
}</string></string>
注意事项与常见误区
增强 for 循环本质是编译器语法糖,底层仍使用迭代器(Iterator)实现,因此有其局限性:
- 无法获取当前索引(要索引请用传统 for 循环)
- 无法在单次遍历中同时访问前后相邻元素
- 不能在循环中结构性修改集合(add/remove 元素),否则报错
- 对数组而言,它只是简化写法,性能与传统 for 基本一致;对集合,因每次调用
iterator(),略微多一次方法调用开销,但可忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











