15

タイトルにあるように、Guavaコレクションを使用してスレッドセーフなHashSetを取得したいと思います。
利用できるものはありますか?

4

4 に答える 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コレクションには、しばらくの間、Sets.newConcurrentHashSet()という名前のファクトリメソッドがありました。

その実装は、Chrisの提案と同様でした。

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

彼らはcom.google.common.collect.Setsクラス内にnewSetFromMap()メソッドを持っていました(JCPJSR -166のメンバーの助けを借りてDougLeaによって書かれました)。そのメソッドは、 java1.6のjava.util.Collectionsに追加されました。

Guavaで並行セットをより適切にサポートする計画があるため、Googleコレクション1.0rc1で廃止されました(詳細はこちら)。

この投稿では、「newSetFromMap」メソッドを使用して並行セットを作成する方法について詳しく説明します。

于 2010-09-03T12:51:33.147 に答える