HashMap的迭代器可以防止并发修改

时间:2015-06-20 09:50:56

标签: java iterator hashmap concurrentmodification

以下代码段由单个线程执行,在第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()方法。 我该怎么办?

1 个答案:

答案 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?
}