Sobes.tech
Back to questions
Junior — Middle
77

Можете объяснить, как реализована работа метода put() в хеш-таблице, используя hashCode?

Answer from AI

sobes.tech AI

Метод put() в хеш-таблице использует хеш-функцию (обычно вызывается hashCode() у ключа), чтобы определить индекс в массиве, где будет храниться пара ключ-значение. Алгоритм примерно такой:

  1. Вызывается hashCode() у ключа, чтобы получить целочисленное значение.
  2. Это значение преобразуется в индекс массива, обычно через операцию взятия по модулю размера массива или с помощью битовых операций.
  3. Если в ячейке массива уже есть элементы (коллизия), происходит обход связанного списка или другой структуры (например, дерево), чтобы найти, есть ли уже такой ключ.
  4. Если ключ найден, значение обновляется; если нет — добавляется новая пара.

Пример упрощённого кода:

public V put(K key, V value) {
    int hash = key.hashCode();
    int index = hash % table.length;
    // Проверяем, есть ли уже элемент с таким ключом
    for (Entry<K, V> e = table[index]; e != null; e = e.next) {
        if (e.key.equals(key)) {
            V oldValue = e.value;
            e.value = value;
            return oldValue;
        }
    }
    // Добавляем новый элемент в начало списка
    Entry<K, V> newEntry = new Entry<>(key, value, table[index]);
    table[index] = newEntry;
    size++;
    return null;
}

Таким образом, hashCode() помогает быстро найти позицию для хранения, а затем происходит проверка на коллизии и обновление или добавление значения.