就像标题所说,我想使用Guava Collections获得一个线程安全的HashSet。
你能帮助我吗?
谢谢!
答案 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