Ответ
Коллизия возникает, когда разные данные дают одинаковый хеш-код. В 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))