本文主要是介绍Map遍历时报ConcurrentModificationException解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
昨天遇到一个问题,就是在遍历Map的时候,报了一个异常:
java.util.ConcurrentModificationExceptionat java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)at java.util.HashMap$EntryIterator.next(HashMap.java:1471)at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
发现原因如下:
Iterator做遍历的时候,HashMap被修改时会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。
给出的解决方案如下:
1) 通过Iterator修改Hashtable
while(it.hasNext()) {
Object ele = it.next();
it.remove();
}
2) 根据实际程序,您自己手动给Iterator遍历的那段程序加锁,给修改HashMap的那段程序加锁。
3) 使用“ConcurrentHashMap”替换HashMap
ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。
import java.util.concurrent.*;
我采用的是第三种,代码如下:
Map<String, String> map = new ConcurrentHashMap<String, String>();
map.putAll(param);
for (Map.Entry<String, String> entry : map.entrySet()) {String key = entry.getKey();map.remove(key);
}
其中param就是调用类传入的map,把它转成 ConcurrentHashMap,然后再进行循环操作。
这篇关于Map遍历时报ConcurrentModificationException解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!