From J。ブロッホ
...メモリリークの原因はリスナーです...コールバックが迅速にガベージコレクションされるようにする最善の方法は、たとえば、 WeakHashMap 。
だから、Java Collections framework )にWeakSetがないのはなぜですか?
Set<Object> weakHashSet = Collections.newSetFromMap(
new WeakHashMap<Object, Boolean>());
Collections.newSetFromMap
ドキュメント、 WeakHashMap
を渡して Set
を取得します。
だから、なぜJavaコレクションフレームワークにWeakSetがないのですか?
それに対する唯一の本当に正しい答えは、私たちが設計上の決定を下した人ではないので、私たちはなぜあなたが言うことができないということです。 Javaデザイナーなぜ彼らが決定したのかを知っている1。
WeakHashSet
の使用例は限られている場合がありますが、Javaクラスライブラリの設計哲学の一部は、考えられるすべての使用例でユーティリティライブラリをクラスライブラリに追加しないことです。
コレクション型を含む他の多くのクラスライブラリがあります。 Apache Commons CollectionsとGoogle Collections(別名Guava)は良い例です。ただし、WeakHashSet
は、ApacheおよびGoogleライブラリを「カット」していません。
そして、もちろん、Collections.newSetFromMap
WeakHashMap
インスタンスをラップします。
1-その決定の正しさを議論することは、StackOverflowの範囲外です。これはQ&Aサイトであり、ディスカッションフォーラムではありません。
実際に Collections.newSetFromMap()
を使用してWeakSetを取得できますが、実際の使用例は非常に限られています。
String.intern()
のようなものを実装したい場合は、代わりにGuavaの Interners.newWeakInterner()
機能をご覧ください。