Sobes.tech
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 metody equals(), będą traktowane jako różne klucze w IdentityHashMap, 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ń.