Sobes.tech
Junior — Middle
89

Que se passe-t-il si l'on insère dans un HashMap deux clés avec le même code de hachage mais des valeurs différentes selon equals ?

Entreprises à qui on a demandé
ГазпромбанкГазпромбанк

Réponse de l'IA

sobes.tech IA

В 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, ключ считается новым и добавляется в коллекцию.