在 Java 中,Fail-Fast 和 Fail-Safe 是两种不同的迭代器行为机制,用于处理在遍历集合时集合被修改的情况。它们的主要区别在于对并发修改的处理方式。
1. Fail-Fast(快速失败)
定义
Fail-Fast 是一种机制,当集合在遍历过程中被修改(例如添加、删除元素),会立即抛出 ConcurrentModificationException 异常。
这种机制旨在尽早发现并发修改问题,避免程序在不确定的状态下继续运行。
实现原理
modCount 机制:
集合类(如 ArrayList、HashMap)内部维护一个 modCount 变量,记录集合被修改的次数。
在创建迭代器时,迭代器会记录当前的 modCount 值。
在每次迭代操作(如 next())时,迭代器会检查 modCount 是否与初始值一致。
如果不一致,说明集合被修改,抛出 ConcurrentModificationException。
示例代码
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
System.out