IdentityHashMap — это специализированная реализация Map в Java, которая использует сравнение по ссылке вместо сравнения объектов для ключей и значений. Это делает её принципиально отличной от обычных реализаций Map, таких как HashMap.
Критическое отличие в том, как сравниваются ключи:
k1 и k2 считаются равными только если k1==k2 (одна и та же ссылка на объект)k1==null ? k2==null : k1.equals(k2) (использует метод equals())Это отличие имеет важные последствия:
equals() и hashCode()IdentityHashMapHashMap два объекта с одинаковым содержимым считаются одним ключомIdentityHashMap подходит для специализированных случаев:
IdentityHashMap нарушает общий контракт интерфейса Map, реализуя нестандартное поведение сравнения. Её следует использовать только когда тебе явно нужна семантика сравнения по ссылке. Для большинства приложений стандартные HashMap или LinkedHashMap — правильный выбор.
IdentityHashMap использует метод equals() для определения равенства ключей, как и HashMap.
Новый — ещё не проверен сообществом
Вы