集合删除元素之并发修改异常

本文深入解析ConcurrentModificationException并发修改异常,探讨其在Java集合框架中产生的原因,尤其是在使用增强for循环遍历并同时修改集合时的问题。文章通过具体代码示例说明如何避免此异常,推荐使用迭代器的remove()方法进行元素删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是并发修改异常?
ConcurrentModificationException异常是一个RuntimeException,并发访问容器出错时抛出
集合元素删除方式 :
① 集合 : remove(obj/index)
② 迭代器: remove()
注意: 当在遍历时,使用集合的删除方法,可能会导致ConcurrentModificationException 并发修改异常。
建议用迭代器的删除方法。

public class 并发修改异常 {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add("e");
		for (String string : list) {
			if (string.equals("c")) {
				list.remove(string);
			}
			System.out.println(string);
		}

	}

}

为什么使用集合的删除方法,会导致并发修改异常?
个人理解:
集合在使用增强for遍历的时候(增强for的实现原理就是用迭代器进行遍历),在遍历之前迭代器的长度与list的长度是一样的,在遍历过程中,list修改了集合长度,而迭代器却不知道,这就造成了迭代器和list集合的实际长度不一致,就会发生错误
从多线程的角度来看,迭代器和list是两个线程,当迭代器进行遍历的时候,另一个线程list对集合容器进行了修改,然而这时不允许的,所以报ConcurrentModificationException并发修改异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值