Middle
Aký je rozdiel medzi HashMap a WeakHashMap v Jave?
sobes.tech AI
Odpoveď od AI
Hlavný rozdiel spočíva v tom, ako spracúvajú svoje kľúče. HashMap používa silné odkazy na kľúče, zatiaľ čo WeakHashMap používa slabé odkazy.
HashMap:
- Používa silné odkazy. Hneď ako je objekt umiestnený ako kľúč v
HashMap, GC (zberač odpadu) ho nemôže odstrániť, pokiaľHashMapexistuje a obsahuje odkaz na tento kľúč. - Nie je vhodný na cacheovanie objektov, ktorých životný cyklus by mal byť určený vonkajšími faktormi, pretože kľúče budú "držať" a brániť ich zberu.
- Používa sa, keď je potrebné zabezpečiť konštantnú prítomnosť všetkých pridaných kľúčov, kým sa mapa nevyčistí alebo manuálne neodstránia prvky.
WeakHashMap:
- Používa slabé odkazy na kľúče. Ak na objekt-kľúč nezostane žiadna silná referencia mimo
WeakHashMap, GC ho môže zozbierať, aj keď je stále prítomný vWeakHashMap. - Keď je kľúč zozbieraný GC, príslušný záznam (pár kľúč-hodnota) sa automaticky odstráni z
WeakHashMap. To sa deje počas operácií na mape (napríkladget,put,remove) alebo počas zberu odpadu. - Ideálny na implementáciu cache, kde je potrebné ukladať objekty, ale bez bránenia ich odstránenia GC, ak nie sú používané inde (slabá referencia neudržiava objekt).
- Iterácia cez
WeakHashMapmôže byť neúplná alebo obsahovať odkazy na už zozbierané kľúče (hoci príslušné záznamy budú neskôr odstránené).
Porovnávacia tabuľka:
| Vlastnosť | HashMap | WeakHashMap |
|---|---|---|
| Typ odkazu na kľúč | Silný | Slabý |
| Zber odpadu kľúča | Nemožný, pokiaľ je kľúč v mape a mapa je prístupná | Možný, ak nie sú žiadne silné externé odkazy |
| Odstránenie záznamu | Len manuálne alebo pri čistení mapy | Manuálne alebo automaticky pri zbere odpadu |
| Použiteľnosť | Všeobecné použitie, keď majú byť kľúče zachované | Cache, keď môžu byť kľúče zozbierané GC |
| Výkon | Zvyčajne stabilný | Môže sa líšiť kvôli interakcii s GC |