Sobes.tech
Back to questions
Junior — Middle
53

Что произойдет, если вставить в HashMap два ключа с одинаковым хеш-кодом, но различными значениями equals?

Companies where asked
ГазпромбанкГазпромбанк

Answer from AI

sobes.tech AI

В HashMap в Java ключи хранятся в бакетах, индексируемых по хеш-коду. Если два ключа имеют одинаковый хеш-код, они попадают в один бакет, но для определения уникальности используется метод equals.

Если вставить два ключа с одинаковым хеш-кодом, но которые не равны по equals, то HashMap сохранит оба ключа как разные записи в одном бакете.

Пример:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, но !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Таким образом, одинаковый хеш-код не означает одинаковые ключи. HashMap сначала ищет бакет по хешу, а затем сравнивает ключи через equals. Если equals возвращает false, ключ считается новым и добавляется в коллекцию.