以下代码段由单个线程执行,在第4行抛出ConcurrentModificationException
:
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
for (String key : map.keySet()) { // Here
map.remove(key);
}
我无法在HashMap
Javadoc找到任何Map.iterator()
或Map.mapIterator()
方法。
我该怎么办?
答案 0 :(得分:2)
正如您猜测的那样,在迭代期间需要iterator
来删除项目。使用Map
执行此操作的方法是迭代entrySet()
(或者,keySet()
,如果您只需要评估密钥):
Iterator<Map.Entry<String, String>> entryIter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry = iter.next();
iter.remove(); // Probably guard this by some condition?
}