W innych implementacjach Map, takich jak HashMap, klucze są bardzo dostępne.Na przykład, jeśli HashMap ma klucze jako klasa Person, jak pokazano poniżej i jeśli obiekt Person ma wartość null, nawet po tym, jeśli zrobimy map.get (Person), otrzymamy wartość z pamięci, ponieważ klucze są silnie odwołane w HashMap.
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Hash Map :" + wm.toString());
wyjściowe: Hash mapa {[email protected]=John}
porównaniu do HashMap, WeakHashMap jest ten, który usunie swoje enteries najszybciej jak klawisze nie mają odniesienia w pamięci. Na przykład, jeśli WeakHashMap ma klucze jako klasę Person jak pokazano poniżej i jeśli obiekt Person ma wartość null, teraz jeśli zrobisz map.get (Person), otrzymamy null z niego, ponieważ klucz nie ma odniesienia (lub raczej słabo osiągalny).
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Weak Hash Map :" + wm.toString());
wyjściowa: słaby Hash mapa {}
Tak, A WeakHashMap zawiera słabe odniesienia do obiektów. Słaby odnośnik ma wskaźnik "zapped", jeśli garbage collector odkryje, że to (i inne słabe referencje) jest ostatnim pozostałym odniesieniem do obiektu. Ale dzieje się tak tylko w niektórych cyklach GC. Z drugiej strony, nie wiem, co dzieje się z licznikiem mapy, kiedy to nastąpi. –
@aioobe "Jeśli emp zawierał ostatni numer referencyjny, dzięki czemu Pracownik jest mocno osiągalny, wówczas wpis na mapie może zostać usunięty." Nie dostałem tego. Czy mógłbyś rozwinąć więcej? – Anand
@anand, Jeśli 'emp' była jedyną zmienną, która odniosła się do jakiegoś' Employee' (oprócz innych * słabych * odniesień, takich jak ten na mapie mieszania), to zrobienie 'emp = null' spowoduje, że dany pracownik kwalifikuje się do zbierania śmieci. Czytaj na temat [dostępność] (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html#reachability). – aioobe