Java ConcurrentModificationException与vector和clear()

Java ConcurrentModificationException与vector和clear(),java,vector,Java,Vector,我有一个非常简单的代码片段,它填充一个向量,遍历它,然后清除它。以下是我在原则上尝试的内容: vector v = new Vector(); v.add(1); v.add(2); v.add(3); ListIterator iter = v.listIterator(); while (iter.hasNext()) { System.out.println(iter.next()); } v.clear() 但我有一个ConcurrentModificationExcept

我有一个非常简单的代码片段,它填充一个向量,遍历它,然后清除它。以下是我在原则上尝试的内容:

vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
ListIterator iter = v.listIterator();

while (iter.hasNext()) {
    System.out.println(iter.next());
}

v.clear()
但我有一个ConcurrentModificationException


通过阅读,显然以某种方式使用“synchronized”是解决方案。但是我看到了两种不同的方法,我想知道在我的情况下解决这个问题的最好、最简单的方法是什么(不涉及显式线程)?

让我为您缩短代码:

Vector<Integer> v = new Vector<Integer>();
v.add(1);
v.add(2);
v.add(3);
for (Integer i: v) {
    System.out.println(i);
}
v.clear();
Vector v=new Vector();
v、 增加(1);
v、 增加(2);
v、 增加(3);
for(整数i:v){
系统输出打印LN(i);
}
v、 清除();
除非进行向前和向后导航,否则不应使用
listIterator()
。对于简单的迭代,请使用
iterator()
方法,最好是在上面显示的For each样式中(实际的迭代器对象对您隐藏)


还有!!!改用
ArrayList

如果没有涉及线程,则您发布的示例可能不完整

如果在对集合进行迭代时修改集合,则可能会发生这种情况

请注意,此异常并不总是表示对象已被其他线程并发修改。如果单个线程发出一系列违反对象约定的方法调用,该对象可能会引发此异常。例如,如果线程在使用fail fast迭代器迭代集合时直接修改集合,迭代器将显示此异常

Vector.listIterator()
的文档明确声明:

请注意,此实现返回的列表迭代器将抛出UnsupportedOperationException以响应其remove、set和add方法,除非覆盖列表的remove(int)、set(int,Object)和add(int,Object)方法

(实际上;
Vector
的文档并没有重新定义它。)