Sobes.tech
Junior — Middle

Как е реализирана обработката на колизии в HashMap при различни ключове с еднакъв хеш код?

sobes.tech AI

Отговор от AI

В Java обработката на колизии в HashMap, когато хеш кодовете са еднакви, се реализира чрез chaining (верижна връзка). Това означава, че всички елементи, чиито хеш код води до един и същи индекс в масива с bucket-ове, се съхраняват в свързан списък или дърво (от Java 8 нататък) в този bucket.

Ако броят на елементите в веригата стане достатъчно голям (по подразбиране повече от 8), свързаният списък се преобразува в балансирано дърво (TreeNode), което подобрява производителността на търсенето от O(n) до O(log n).

Пример за опростена логика на вмъкване:

int bucketIndex = hash(key) % table.length;
Node<K,V> head = table[bucketIndex];
// Проверка дали ключът вече съществува в веригата
while (head != null) {
    if (head.key.equals(key)) {
        head.value = value; // актуализиране на стойността
        return;
    }
    head = head.next;
}
// Ако ключът не съществува, добавя се нов възел в началото на списъка
Node<K,V> newNode = new Node<>(key, value);
newNode.next = table[bucketIndex];
table[bucketIndex] = newNode;

По този начин HashMap ефективно се справя с колизиите, като запазва приемлива производителност.