带有番石榴集合的线程安全HashSet

时间:2010-09-02 16:58:13

标签: java collections hashset guava

就像标题所说,我想使用Guava Collections获得一个线程安全的HashSet。

你能帮助我吗?

谢谢!

4 个答案:

答案 0 :(得分:27)

Set<K> set = Collections.newSetFromMap(new ConcurrentHashMap<K, Boolean>());

答案 1 :(得分:7)

这是正确的答案,使用Guava中的Sets类。无论如何,来自@crhis的答案很好。

Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>());

答案 2 :(得分:4)

Google Collections 已暂时 名为Sets.newConcurrentHashSet()的工厂方法。

它的实施类似于克里斯的建议:

public static <E> Set<E> newConcurrentHashSet() {
  return newSetFromMap(new ConcurrentHashMap<E, Boolean>());
}

他们在 com.google.common.collect.Sets 类中有一个 newSetFromMap()方法(由Doug Lea在JCP JSR-166成员的帮助下编写) )。该方法已添加到java 1.6中的 java.util.Collections

它已在Google Collections 1.0rc1中撤销,因为有计划更好地支持Guava中的并发集(更多信息here)。

This post扩展了使用“newSetFromMap”方法来构造并发集。

答案 3 :(得分:4)

Java 8引入了创建并发哈希集的新方法 - ConcurrentHashMap.newKeySet()

Set<K> set = ConcurrentHashMap.newKeySet();

它比包裹Collections.newSetFromMap

更短