middle
В чем разница между HashMap и IdentityHashMap
IdentityHashMap — это реализация Map, которая использует сравнение ссылок (==) вместо equals() при проверке ключей и значений, и System.identityHashCode() вместо hashCode().
| Характеристика | HashMap | IdentityHashMap |
|---|---|---|
| Сравнение ключей | equals() | == (ссылочное) |
| Хэш-функция | hashCode() | System.identityHashCode() |
| Мутабельные ключи | Опасно (потеря элемента) | Безопасно |
| Реализация | Массив корзин + списки/деревья | Линейное пробирование |
| Применение | Общее назначение | Сериализация, клонирование, обход графов |
Два ключа k1 и k2 считаются равными в IdentityHashMap только если k1 == k2. Это полезно, когда нужно различать объекты, даже если их equals() возвращает true.
Типичные сценарии использования: обход графа объектов при сериализации (чтобы отслеживать уже посещенные объекты), реализация клонирования, профилирование — везде, где важна именно идентичность объекта, а не его логическое равенство.
На собеседовании: ключевая мысль — сравнение по ссылке (==) вместо equals(). Назовите практический сценарий: сериализация / обход графа объектов.