Sobes.tech
Middle+

Aký je rozdiel medzi HashMap a IdentityHashMap?

sobes.tech AI

Odpoveď od AI

Hlavný rozdiel spočíva v spôsobe, akým porovnávajú kľúče.

  • HashMap používa metódu equals() a hash kód kľúča na určenie rovnosti, čo zodpovedá štandardnej semantike rovnosti objektov.
  • IdentityHashMap striktne porovnáva kľúče podľa referencie (použitím ==), ignorujúc metódu equals(). To znamená, že dva rôzne objekty, aj keď sú "rovnaké" podľa ich equals() metódy, budú považované za odlišné kľúče v IdentityHashMap, ak majú odlišné adresy v pamäti.

Príklad:

// HashMap
Object key1 = new String(" kľúč");
Object key2 = new String(" kľúč");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "hodnota 1");
hashMap.put(key2, "hodnota 2"); // prepíše hodnotu pre " kľúč"

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "hodnota 1");
identityHashMap.put(key2, "hodnota 2"); // pridá druhý záznam, pretože key1 != key2 podľa referencie

Používa sa menej často, napríklad:

  • Pri serializácii/deserializácii, keď je identita objektov dôležitá v rámci jedného grafu objektov.
  • V niektorých špecifických algoritmoch, kde je potrebné rozlišovať objekty podľa ich identity a nie podľa ich logickej rovnosti.
  • Na detekciu cyklických odkazov.