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óduequals(). To znamená, že dva rôzne objekty, aj keď sú "rovnaké" podľa ichequals()metódy, budú považované za odlišné kľúče vIdentityHashMap, 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.