Назад к вопросам
Middle+
115
questionbank
В чем разница между HashMap и IdentityHashMap?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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 по ссылке
Используется IdentityHashMap реже, например:
- При сериализации/десериализации, когда важна идентичность объектов в рамках одного графа объектов.
- В некоторых специфических алгоритмах, где требуется различать объекты по их идентичности, а не по их логическому эквиваленту.
- Для обнаружения циклических ссылок.