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 aequals()metódust. Ez azt jelenti, hogy két különböző objektum, még akkor is, ha aequals()szerint "egyenlőek", külön kulcsként lesznek kezelve azIdentityHashMap-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.