1.报出一个并发修改的异常
Exception in thread “main” java.util.ConcurrentModificationException
at java.util.ArrayList
I
t
r
.
c
h
e
c
k
F
o
r
C
o
m
o
d
i
f
i
c
a
t
i
o
n
(
A
r
r
a
y
L
i
s
t
.
j
a
v
a
:
909
)
a
t
j
a
v
a
.
u
t
i
l
.
A
r
r
a
y
L
i
s
t
Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList
Itr.checkForComodification(ArrayList.java:909)atjava.util.ArrayListItr.next(ArrayList.java:859)
报错代码:
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add(2);
Iterator it = list.iterator();
while (it.hasNext()){
list.add(3);//报错
System.out.println(it.next());
}
}
动图演示查找原因:
2.解决方法
解决这个异常方式就是不使用迭代器去添加数据,理由如下:
在源码里是由于modCount != expectedModCount
而导致报出这个异常的。
接着往下看为什么modCount != expectedModCount
,在源码可以看到这样的一个结果:
在开始时modCount
是等于 expectedModCount
的,而当在迭代器进行迭代时使用list.add(3)
就会导致modCount
增加。源码如下:
注意:增强for的实现原理和迭代器的实现原理也是一样的。使用增强for也会出现这个问题的。
如有不对的地方,还望指出,谢谢!!!