Sobes.tech
Back to questions
Junior — Middle
64

Когда в HashMap возникает ситуация, при которой два ключа имеют одинаковый хеш и вызывают коллизию

Answer from AI

sobes.tech AI

Коллизия в HashMap возникает, когда два разных ключа имеют одинаковое значение хеш-кода (hashCode), и, следовательно, попадают в одну и ту же корзину (bucket) внутреннего массива. Это происходит потому, что HashMap использует хеш-код ключа для определения индекса в массиве, где будет храниться пара ключ-значение.

Например, если у двух объектов ключей метод hashCode() возвращает одинаковое число, то при добавлении в HashMap они попадут в один и тот же бакет. Чтобы разрешить коллизию, HashMap хранит элементы в виде связного списка (или дерева, если элементов много) внутри этого бакета и при поиске перебирает их, сравнивая ключи методом equals().

Пример:

String key1 = "FB"; // hashCode() == 2236
String key2 = "Ea"; // hashCode() == 2236

HashMap<String, Integer> map = new HashMap<>();
map.put(key1, 1);
map.put(key2, 2); // коллизия, оба ключа имеют одинаковый hashCode

System.out.println(map.get("FB")); // 1
System.out.println(map.get("Ea")); // 2

Здесь "FB" и "Ea" — известный пример строк с одинаковым хеш-кодом, что приводит к коллизии.