> Как определить значение при коллизии в цепочке хэш-таблицы (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: VK

Стек: Go

> Пример ответа

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

GO
type HashTable struct {
buckets []*Entry
size int
}
type Entry struct {
key string
value interface{}
next *Entry
}
func (ht *HashTable) Get(key string) (interface{}, bool) {
index := ht.hash(key) % ht.size
current := ht.buckets[index]
for current != nil {
if current.key == key {
return current.value, true
}
current = current.next
}
return nil, false
}

Алгоритм:

  1. Вычисляем хэш ключа и получаем индекс корзины.

  2. Проходим по цепочке (связному списку) в этой корзине.

  3. Сравниваем ключи - если находим совпадение, возвращаем значение.

  4. Если дошли до конца списка - ключ отсутствует.

Для оптимизации можно использовать сбалансированное дерево вместо списка при большом количестве коллизий, как это делается в Go map (начиная с версии 1.8).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью