我有以下代码。
在这里,我通过迭代器进行迭代后,尝试遍历ListIterator。但代码抛出了ConcurrentModificationException异常。我在Iterator完成后才使用ListIterator进行修改,为什么会出现此异常。
当我在{here}处初始化ListIterator而不是顶部时,代码运行得非常完美。
1、ConcurrentModificationException不是在两个线程同时修改列表时抛出的吗?
2、初始化迭代器是否会在列表上创建锁定? 如果是的话,为什么Java允许我们在另一个Iterator已经被初始化后初始化Iterator?
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);
}
在这里,我通过迭代器进行迭代后,尝试遍历ListIterator。但代码抛出了ConcurrentModificationException异常。我在Iterator完成后才使用ListIterator进行修改,为什么会出现此异常。
当我在{here}处初始化ListIterator而不是顶部时,代码运行得非常完美。
1、ConcurrentModificationException不是在两个线程同时修改列表时抛出的吗?
2、初始化迭代器是否会在列表上创建锁定? 如果是的话,为什么Java允许我们在另一个Iterator已经被初始化后初始化Iterator?
int
值的变化,当元素被添加或删除时。 - Paul Boddington