java.util.ConcurrentModificationException产生原因及解决方法

java.util.ConcurrentModificationException产生的原因是遍历Collection对象的同时修改了该Collection对象,例如下面的代码就会抛出ConcurrentModificationException异常:

import java.util.*;

public class Main
{
	public static void main(String args[])
	{
		Set<Integer> chain = new TreeSet<Integer>();
		chain.add(1);
		chain.add(2);
		for (Integer elem : chain)
		{
			chain.remove(elem);
		}
	}
}

运行结果为

D:\learnJava>java Main
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source)
        at java.util.TreeMap$KeyIterator.next(Unknown Source)
        at Main.main(Main.java:10)

解决方法是用迭代器遍历Collection对象,并调用迭代器的方法对Collection对象中的元素进行修改:

import java.util.*;

public class Main
{
	public static void main(String args[])
	{
		Set<Integer> chain = new TreeSet<Integer>();
		chain.add(1);
		chain.add(2);
		Iterator<Integer> iter = chain.iterator();
		while (iter.hasNext())
		{
			System.out.println(iter.next());
			iter.remove();
		}
	}
}

运行结果为

D:\learnJava>java Main
1
2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值