Что происходит в HashSet, если у ключей совпадает Hash

«Что происходит в HashSet, если у ключей совпадает Hash» — вопрос из категории Алгоритмы и структуры данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При совпадении хэшей ключей в HashSet используется цепочка (chaining) для хранения элементов с одинаковым хэшем.

  1. Хэш-функция вычисляет индекс корзины (bucket) в массиве.
  2. Если корзина пуста — элемент добавляется туда.
  3. Если хэши совпали, но equals() возвращает false — элемент добавляется в связный список (или дерево, если элементов много) внутри корзины.
  4. При поиске сначала проверяется хэш, затем equals() для всех элементов в корзине.
val set = HashSet<String>()
set.add("a") // hash("a") = 97
set.add("b") // hash("b") = 98
set.add("a") // не добавится, так как equals() вернет true