Sobes.tech
Junior — Middle

Πώς γίνεται η επιλογή του καλαθιού για το στοιχείο που προστίθεται στη δομή δεδομένων HashMap;

sobes.tech AI

Απάντηση από AI

В структуре данных HashMap в Java выбор корзины (бакета) для добавляемого элемента происходит на основе хэш-кода ключа. Алгоритм следующий:

  1. Вызывается метод hashCode() у ключа, чтобы получить его хэш.
  2. Этот хэш дополнительно обрабатывается (например, с помощью операции XOR с сдвигом) для лучшего распределения битов и уменьшения коллизий.
  3. Полученное значение хэша берётся по модулю размера массива корзин (обычно размер массива — степень двойки, поэтому используется побитовое И с маской length - 1), чтобы определить индекс корзины.

Пример упрощённого вычисления индекса корзины:

int hash = key.hashCode();
int index = (hash ^ (hash >>> 16)) & (table.length - 1);

Таким образом, элемент помещается в корзину с индексом index. Если в корзине уже есть элементы (коллизия), они хранятся в связном списке или дереве (начиная с Java 8).