Потокобезопасный HashSet с коллекциями Guava - PullRequest
15 голосов
/ 02 сентября 2010

Как видно из названия, я хотел бы получить потокобезопасный HashSet с использованием коллекций Guava.

Вы можете мне помочь?

Спасибо!

Ответы [ 4 ]

27 голосов
/ 02 сентября 2010
Set<K> set = Collections.newSetFromMap(new ConcurrentHashMap<K, Boolean>());
7 голосов
/ 06 сентября 2010

Это был бы правильный ответ, используя класс Sets из Guava. В любом случае, ответ от @crhis был хорошо продуман.

Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>());
4 голосов
/ 14 июня 2018

Java 8 представляет новый способ создания параллельного хеш-набора - ConcurrentHashMap.newKeySet ()

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

Это короче, чем упаковка Collections.newSetFromMap

4 голосов
/ 03 сентября 2010

Google Collections имел фабричный метод с именем Sets.newConcurrentHashSet () на некоторое время.

Его реализация была похожа на предложение Криса:

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

У них есть метод newSetFromMap () внутри класса com.google.common.collect.Sets (написанный Дугом Ли при содействии членовJCP JSR-166).Этот метод был добавлен в java.util.Collections в java 1.6.

Он был отозван в Google Collections 1.0rc1, поскольку в Гуаве планируется улучшить поддержку одновременных наборов (дополнительная информация здесь ).

В этом посте раскрывается использование метода "newSetFromMap" для создания параллельных множеств.

...