Czy HashSet<WeakReference<T>>
jest odpowiednikiem Set
odpowiednikiem WeakHashMap<T>
? To znaczy, czy wpisy zostaną automatycznie usunięte , gdy nie będą już przywoływane?Ustaw odpowiednik WeakHashMap?
Jeśli nie, jaki jest równoważny?
Czy HashSet<WeakReference<T>>
jest odpowiednikiem Set
odpowiednikiem WeakHashMap<T>
? To znaczy, czy wpisy zostaną automatycznie usunięte , gdy nie będą już przywoływane?Ustaw odpowiednik WeakHashMap?
Jeśli nie, jaki jest równoważny?
Nie, jeśli obiekt odwołuje jednego z WeakReference
s w zestawie dostaje śmieci-pobierana, WeakReference
nadal będzie w komplecie i nie zostaną usunięte automatycznie, ale ich referent
będzie null
. A WeakHashMap
używa dodatkowego kodu do usunięcia słabo odwołanych kluczy z mapy, gdy są zbierane śmieci.
Zestaw równoważnik WeakHashMap
jest:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>());
Jako HashSet
wykorzystuje również HashMap
wewnętrznie.
BTW: A WeakReference
to tylko obiekt wskazujący na obiekt, który może być gromadzony podczas zbierania śmieci, pomimo odniesienia do niego zawartego przez WeakReference
. Sam plik WeakReference
nie będzie zbierany w pamięci śmieci, dopóki nie będzie już nigdzie mocno przywoływany, podobnie jak wszystkie inne obiekty.
Oto odpowiedź, której szukałem. Dziękuję Ci! –
Uwierz w to, czego możesz potrzebować: http://stackoverflow.com/a/4062950/717932 – dardo
możliwy duplikat [Dlaczego istnieje WeakHashMap, ale nieobecny WeakSet?] (Http://stackoverflow.com/ pytania/4062919/why-does-exist-weakhashmap-but-absent-weakset) –
To pytanie nie jest duplikatem. Drugie pytanie próbuje odpowiedzieć, dlaczego nie ma WeakSet. Nie zapewnia odpowiednika zestawu, ani nie odpowiada, czy mój przykład powyżej jest liczony jako odpowiednik. –