62,616
社区成员
发帖
与我相关
我的任务
分享
由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:
如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。
因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。
import java.util.*;
public class TestVector {
public static void main (String args[]){
Vector vector = new Vector ();
int[] intArray = {1, 2, 3, 4, 5};
vector.add(intArray);
Iterator iterator = vector.iterator();
while (iterator.hasNext()){
vector.add(6);
System.out.print (iterator.next());
}
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at TestVector.main(TestVector.java:14)