首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代ConcurrentHashmap

迭代ConcurrentHashmap
EN

Stack Overflow用户
提问于 2014-04-09 03:09:43
回答 1查看 991关注 0票数 2

我的当前代码正在使用for-each Java5循环迭代ConcurrentHashMap。在下面的代码中,由于隐式迭代器是故障安全的,所以我不会遇到ConcurrentModificationException。

代码语言:javascript
复制
Map<Long,String> map = new ConcurrentHashMap <Long,String>();
map.put(1L, "1");
map.put(2L, "2");
System.out.println("map size before" + map.size());
for ( Long id : map.keySet()) {
    map.remove(id);
}
System.out.println("map size after" + map.size());

为什么我应该更改代码以使用显式迭代器并运行iterator.remove()?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 03:14:04

为什么我应该更改代码以使用显式迭代器并运行iterator.remove()?

在幕后,CHM使用的迭代器调用map.remove(key)本身。请看下面的代码。

也就是说,从迭代器中删除是正确的模式,如果可能的话,使用公共模式总是好的。例如,如果您复制代码以使用不同的映射,或者将此代码中的映射降级为非CHM,那么如果使用迭代器,您的代码不会中断。

代码语言:javascript
复制
abstract class HashIterator {
    ...
    public void remove() {
        if (lastReturned == null)
            throw new IllegalStateException();
        ConcurrentHashMap.this.remove(lastReturned.key);
        lastReturned = null;
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22952061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档