Что происходит в HashSet при добавке нового элемента

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

Ответ

При добавлении элемента в HashSet происходит следующее:

  1. Вычисляется хэш-код элемента через метод hashCode().
  2. На основе хэша определяется корзина (bucket), куда будет помещен элемент.
  3. Если корзина пуста - элемент добавляется напрямую.
  4. Если в корзине уже есть элементы:
    • Сравнивается хэш нового элемента с существующими
    • Если хэши разные - элемент добавляется в корзину
    • Если хэши совпадают - вызывается equals() для проверки реального равенства
    • Если equals() возвращает true - элемент считается дубликатом и не добавляется
    • Если equals() возвращает false - элемент добавляется в корзину (коллизия)

Пример:

val set = HashSet<String>()
set.add("apple")  // добавляется
set.add("apple")  // не добавляется (дубликат)