2013-10-14 2 views
9

HashSet<WeakReference<T>>SetWeakHashMap<T>に相当しますか?つまり、参照されなくなったときに自動的にとなりますが削除されますか?WeakHashMapに相当する値を設定しますか?

そうでない場合、それは何ですか?

+0

これはあなたが探しているかもしれないと信じています:http://stackoverflow.com/a/4062950/717932 – dardo

+0

[なぜWeakHashMapが存在しますが、WeakSetはありませんか?](http://stackoverflow.com/質問/ 4062919/why-does-exist-weakhashmap-but-absent-weakset) –

+1

この質問は重複していません。もう一つの質問はWeakSetがない理由を答えることを試みます。これはSetの同等物を提供するものではなく、上記の例が同等かどうかを判断するものでもありません。 –

答えて

13

セットにWeakReference Sのいずれかによって参照されるオブジェクトは、ガベージコレクション取得する場合いいえ、WeakReferenceはまだセットに含まれることになると自動的に削除されませんが、そのreferentnullあろう。 WeakHashMapは、弱参照キーをガベージコレクションされたマップから削除するために追加のコードを使用します。

WeakHashMapのセットと等価である:

Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>()); 

HashSetも内部HashMapを使用しています。

BTW:WeakReferenceは、参照がWeakReferenceに保持されていてもガベージコレクションされる可能性のあるオブジェクトを指すオブジェクトです。 WeakReference自体は、他のすべてのオブジェクトと同じように、もはやどこからでも強く参照されない限り、ガベージコレクションされません。

+0

これは私が探していた答えです。ありがとうございました! –

関連する問題