Sobes.tech
Middle+

Каква е разликата между HashMap и IdentityHashMap?

sobes.tech AI

Отговор от AI

Основната разлика е в начина, по който сравняват ключовете.

  • HashMap използва метода equals() и хеш кода на ключа за определяне на равенството, което съответства на стандартната семантика на равенство на обектите.
  • IdentityHashMap сравнява ключовете строго по референция (използвайки ==), игнорирайки метода equals(). Това означава, че два различни обекта, дори ако са "равни" според техния метод equals(), ще се считат за различни ключове в IdentityHashMap, ако имат различни адреси в паметта.

Пример:

// HashMap
Object key1 = new String(" ключ");
Object key2 = new String(" ключ");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "стойност 1");
hashMap.put(key2, "стойност 2"); // ще презапише стойността за " ключ"

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "стойност 1");
identityHashMap.put(key2, "стойност 2"); // ще добави втори запис, тъй като key1 != key2 по референция

Използва се по-рядко, например:

  • При сериализация/десериализация, когато идентичността на обектите е важна в рамките на един граф от обекти.
  • В някои специфични алгоритми, където е необходимо да се различават обекти по тяхната идентичност, а не по тяхната логическа еквивалентност.
  • За откриване на циклични препратки.