List、Map等这类数据结构在日常开发中的使用不可谓不多,经常会有遍历的同时进行修改的情况。例如:
1 | Integer[] numbers = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; |
这段代码在执行的时候便会抛出异常:
1 | Exception in thread "main" java.util.ConcurrentModificationException |
这个异常出现通常是遍历一个集合的同时,在修改这个集合。看到next方法:
1 | public E next() { |
然后看到checkForComodification:
1 | final void checkForComodification() { |
即当modCount 与 expectedModCount 不相等时,会抛 ConcurrentModificationException 异常。其实很早之前就会碰到这个问题,使用Iterator进行遍历和操作就不会出现这个问题了,但是一直没有深究其原因。

