为什么没有ConcurrentHashSet对ConcurrentHashMap

问题:

HashSet是基于HashMap的。
如果我们查看HashSet<E>实施,一切都是在HashMap<E,Object>下管理的
 <E>被用作HashMap的键
我们知道HashMap不是线程安全的。这就是为什么我们在Java中有ConcurrentHashMap
基于此,我很困惑为什么我们没有一个应该基于的ConcurrentHashSet
还有什么我失踪的吗?我需要在多线程环境中使用Set
另外,如果我想创建自己的ConcurrentHashSet,我可以通过将HashMap替换为ConcurrentHashMap来实现它,并将剩下的就是这样吗?

回答:

没有内置的ConcurrentHashSet类型,因为您可以始终derive从地图集合。由于有许多类型的地图,您可以使用一种方法从给定的地图(或地图类)生成一个集合。
在Java 8之前,您将使用并行哈希映射生成并发哈希集,使用Collections.newSetFromMap(map)
在Java 8(由@Matt指出)中,您可以通过ConcurrentHashMap.newKeySet()获取并发哈希集view。这比旧的newSetFromMap要简单得多,需要你传递一个空的地图对象。但具体到ConcurrentHashMap
无论如何,Java设计人员可以在每次创建新的地图界面时创建一个新的设置界面,但是当第三方创建自己的地图时,这种模式是不可能执行的。最好有静态方法导出新的集合;即使您创建自己的地图实现,该方法总是有效。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why there is no ConcurrentHashSet against ConcurrentHashMap

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

67 + = 69