Как следует из названия, я хотел бы получить потокобезопасный HashSet с использованием коллекций Guava.
Доступны ли какие-либо?
Поточно-безопасный HashSet с коллекциями Guava
Ответы (4)
Это был бы правильный ответ, используя класс Sets из Guava. В любом случае, ответ от @crhis был добрым намерением.
Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>());
Collections.newSetFromMap(new ConcurrentHashMap<V, Boolean>());
.
- person sarsonj; 15.10.2019
В Java 8 представлен новый способ создания параллельного набора хэшей — ConcurrentHashMap.newKeySet()
Set<K> set = ConcurrentHashMap.newKeySet();
Это короче, чем упаковка в Collections.newSetFromMap
Коллекции Google имели фабричный метод с именем 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, поскольку есть планы улучшить поддержку параллельных наборов в Guava (дополнительная информация здесь).
В этом сообщении подробно рассматривается использование метод newSetFromMap для создания параллельных наборов.
Multimap
иMultiset
, а также мягкие/слабые ключи/значения сMapMaker
. :-) (Конечно, есть много других функций, слишком много, чтобы я мог их охватить.) - person Chris Jester-Young   schedule 02.09.2010