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