<分区>
我有以下代码
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Arrays.stream("hello how are you".split(" ")).forEach(s -> list.add(s));
Iterator<String> it = list.iterator();
ListIterator<String> lit = list.listIterator();
while (it.hasNext()) {
String s = it.next();
if (s.startsWith("a")) {
it.remove();
} else {
System.out.println(s);
}
}
System.out.println(list);
// {here}
while (lit.hasNext()) {
String s = lit.next();
if (s.startsWith("a")) {
lit.set("1111" + s);
} else {
System.out.println(s);
}
}
System.out.println(list);
}
在这里,在遍历 Iterator
之后,我尝试遍历 ListIterator
。但是代码抛出 ConcurrentModificationException
。我只是在Iterator
完成后才使用ListIterator
进行修改,但为什么会出现此异常。
当我在 {here}
而不是顶部初始化 ListIterator 时,代码运行完美。
ConcurrentModificationException
是不是当列表被两个线程同时修改时抛出?- 是否初始化迭代器,在列表上创建一个锁?如果是,那么为什么 Java 让我们在一个
Iterator
已经被另一个Iterator
初始化之后再初始化它?