Когда возникает коллизия

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

Ответ

Коллизия возникает, когда разные данные дают одинаковый хеш-код. В HashMap это приводит к тому, что несколько объектов попадают в одну корзину (bucket), образуя связанный список (или дерево в Java 8+).

Пример:

data class Person(val name: String) {
    override fun hashCode() = 1 // Намеренно плохая реализация
}

val map = HashMap<Person, String>()
map[Person("Alice")] = "Developer"
map[Person("Bob")] = "Designer" // Коллизия - оба объекта в одном bucket

Последствия:

  • Снижение производительности (O(1) → O(n) для поиска)
  • Увеличение времени операций

Как избежать:

  • Правильно реализовывать hashCode() (равные объекты → равные хеши)
  • В HashMap при большом количестве коллизий корзина преобразуется в дерево (O(log n))