关于使用增强for循环遍历时执行删除操作报错 ConcurrentModificationException

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.解决方法:
	>>> 只需要通过迭代器进行删除就行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值