java 中的 for-each 循环(增强型 for 循环)通过简化遍历语法,让开发者无需手动管理索引或获取迭代器即可顺序访问数组或集合中的元素。使用它只需声明一个变量来接收元素类型,后跟冒号和待遍历的容器,例如 for (type item : collection),这样代码更简洁且不易出错。该循环在底层会自动处理迭代逻辑,适用于只需要读取元素而无需修改集合结构或依赖索引的场景。

for-each 遍历 List 集合时如何获取当前索引
在遍历 List 集合时,for-each 循环本身不提供索引变量,因为它是基于迭代器实现的抽象遍历。如果需要索引,通常的做法是使用传统的 for 循环配合 get(index) 方法,或者在 for-each 外部维护一个计数器变量。对于 ArrayList,传统循环性能略优;对于其他实现,for-each 更安全。

import java.util.ArrayList;
import java.util.List;
public class IndexExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 方式一:使用传统 for 循环获取索引
for (int i = 0; i < list.size(); i++) {
System.out.println("Index: " + i + ", Value: " + list.get(i));
}
// 方式二:在 for-each 中手动维护索引
int index = 0;
for (String item : list) {
System.out.println("Index: " + index + ", Value: " + item);
index++;
}
}
}for-each 遍历 Map 集合时如何同时获取键和值
当遍历 Map 集合时,不能直接对 Map 对象使用 for-each 来获取键值对,因为 Map 不是 Iterable 的子接口。正确的做法是先调用 entrySet() 获取键值对集合,然后在 for-each 中遍历 Map.Entry 对象,再通过 getKey() 和 getValue() 分别获取键和值。这种方式比先遍历键再查值的效率更高。
立即学习“Java免费学习笔记(深入)”;

import java.util.HashMap;
import java.util.Map;
public class MapEntryExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 3);
// 正确用法:遍历 entrySet()
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
}
}在 for-each 循环中修改集合元素会发生什么
在 for-each 循环中,如果尝试修改集合中的对象引用(例如将某个元素设为 null 或指向新对象),这不会影响原集合的结构,因为循环变量只是元素的副本。但是,如果集合中的元素是可变对象(如自定义类的实例),修改该对象的内部状态会反映在原集合中。此外,如果在循环过程中直接修改集合的结构(如添加或删除元素),会抛出 ConcurrentModificationException。


















