1.使用场景;
-- 对 ArrayList(数组列表/集合) 进行遍历的时候执行删除操作
2. 异常说明: ConcurrentModificationException
-- 这是并发修改异常
3, 产生原因:
>>> 在使用增强 for 遍历集合时, 底层其实使用的是迭代器进行遍历的
>>> 源码走向:
Iterator<String> iterator = strings.iterator();
iterator >>> return new Itr();
new Itr(); >>> int expectedModCount = modCount; 关键在这里
>>> 解释:
expectedModCount 是一个中间变量, 用来记录 modCount 的初始值
modCount 是用来记录删除或添加操作的次数的
当执行删除操作时,其实就是执行 Itr 对象中的删除方法时调用 fastRemove(index)方法
里面会执行 modCount++;
当再次执行 next() 方法时会调用 checkForComodification(); 然后调用
if (modCount != expectedModCount){ throw new ConcurrentModificationException(); }
这样就会出现问题报错, 也就是因为 modCount 改变了但是 expectedModCount 每变
4.解决方法:
>>> 只需要通过迭代器进行删除就行
关于使用增强for循环遍历时执行删除操作报错 ConcurrentModificationException
最新推荐文章于 2024-02-28 20:00:00 发布