遍历list进行remove操作异常
2020-07-11 本文已影响0人
IceBear_9f3b
产生问题:
在对list增强for循环进行遍历的时候,如果在不恰当的位置使用了remove,就会产生ConcurrentModificationException异常
产生原因:
java的foreach循环其实就是根据list对象创建一个Iterator迭代对象,然后针对Iterator进行遍历.遍历过程中会调用对应的hasNext和next方法
(1)ArrayList的hasnext和next 方法
(2)LinkedList的hasnext和next 方法
两种list的iterator 都有一个方法是checkForComodification,目的是校验是否list被修改过。list中有个属性是modCount,记录着操作修改list的属性,如果操作list的add或remove,modCount属性都会进行+1的操作。
如果发生了修改,那么在下一次执行到这一步校验的时候,就会发现两个值不相等,抛出异常。