Sobes.tech
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ľ HashMap existuje 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ý v WeakHashMap.
  • 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íklad get, 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 WeakHashMap môž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