Gymterview
middle

В чем разница между HashMap и IdentityHashMap

IdentityHashMap — это реализация Map, которая использует сравнение ссылок (==) вместо equals() при проверке ключей и значений, и System.identityHashCode() вместо hashCode().

Характеристика HashMap IdentityHashMap
Сравнение ключей equals() == (ссылочное)
Хэш-функция hashCode() System.identityHashCode()
Мутабельные ключи Опасно (потеря элемента) Безопасно
Реализация Массив корзин + списки/деревья Линейное пробирование
Применение Общее назначение Сериализация, клонирование, обход графов

Два ключа k1 и k2 считаются равными в IdentityHashMap только если k1 == k2. Это полезно, когда нужно различать объекты, даже если их equals() возвращает true.

Типичные сценарии использования: обход графа объектов при сериализации (чтобы отслеживать уже посещенные объекты), реализация клонирования, профилирование — везде, где важна именно идентичность объекта, а не его логическое равенство.

На собеседовании: ключевая мысль — сравнение по ссылке (==) вместо equals(). Назовите практический сценарий: сериализация / обход графа объектов.