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

猜你喜欢

转载自blog.csdn.net/da_kao_la/article/details/85336215