Sobes.tech
Middle+

Mi a különbség a HashMap és az IdentityHashMap között?

sobes.tech MI

Válasz az MI-től

A fő különbség abban rejlik, hogyan hasonlítják össze a kulcsokat.

  • HashMap a equals() metódust és a kulcs hash-kódját használja az egyenlőség meghatározásához, ami megfelel az objektumok standard egyenlőségi szemantikájának.
  • IdentityHashMap szigorúan referenciák szerint hasonlítja össze a kulcsokat (== használatával), figyelmen kívül hagyva a equals() metódust. Ez azt jelenti, hogy két különböző objektum, még akkor is, ha a equals() szerint "egyenlőek", külön kulcsként lesznek kezelve az IdentityHashMap-ben, ha külön memória címen helyezkednek el.

Példa:

// HashMap
Object key1 = new String(" kulcs");
Object key2 = new String(" kulcs");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "érték 1");
hashMap.put(key2, "érték 2"); // felülírja az értéket a " kulcs"-hoz

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "érték 1");
identityHashMap.put(key2, "érték 2"); // hozzáad egy második bejegyzést, mivel key1 != key2 referenciaként

Kevésbé használják, például:

  • Sorosítás/deszerializáció során, amikor az objektumok identitása fontos egy objektumgrafon belül.
  • Bizonyos speciális algoritmusokban, ahol az objektumokat azonosításuk szerint kell megkülönböztetni, nem pedig logikai egyenértékűségük szerint.
  • Ciklikus hivatkozások felismerésére.