Middle+
251
Jaka jest różnica między HashMap a IdentityHashMap?
Odpowiedź od AI
sobes.tech AI
Główna różnica polega na tym, jak porównują klucze.
- HashMap używa metody
equals()i kodu hash klucza do określenia równości, co odpowiada standardowej semantyce równości obiektów. - IdentityHashMap porównuje klucze ściśle według referencji (używając
==), ignorując metodęequals(). Oznacza to, że dwa różne obiekty, nawet jeśli są "równe" według ich metodyequals(), będą traktowane jako różne klucze wIdentityHashMap, jeśli mają różne adresy w pamięci.
Przykład:
// HashMap
Object key1 = new String(" klucz");
Object key2 = new String(" klucz");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "wartość 1");
hashMap.put(key2, "wartość 2"); // nadpisze wartość dla " klucz"
// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "wartość 1");
identityHashMap.put(key2, "wartość 2"); // doda drugi wpis, ponieważ key1 != key2 po referencji
Rzadziej używany, na przykład:
- Podczas serializacji/deserializacji, gdy ważna jest tożsamość obiektów w ramach jednego grafu obiektów.
- W niektórych specyficznych algorytmach, gdzie konieczne jest rozróżnianie obiektów po ich tożsamości, a nie po ich logice równości.
- Do wykrywania cyklicznych odwołań.