正如标题所说,我想使用 Guava Collections 获得一个线程安全的 HashSet。
有可用的吗?
问问题
13150 次
4 回答
27
Set<K> set = Collections.newSetFromMap(new ConcurrentHashMap<K, Boolean>());
于 2010-09-02T17:05:23.000 回答
7
这将是正确的答案,使用来自 Guava 的 Sets 类。无论如何,@crhis 的回答是好的。
Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>());
于 2010-09-06T18:37:35.827 回答
5
Java 8 引入了创建并发哈希集的新方法 - ConcurrentHashMap.newKeySet()
Set<K> set = ConcurrentHashMap.newKeySet();
它比包裹更短Collections.newSetFromMap
于 2018-06-14T12:59:16.253 回答
4
Google Collections有一段时间有一个名为Sets.newConcurrentHashSet()的工厂方法。
它的实现类似于 Chris 的建议:
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 中更好地支持并发集(更多信息在这里)。
这篇文章扩展了使用“newSetFromMap”方法来构造并发集合。
于 2010-09-03T12:51:33.147 回答