Ответ
Коллизии возникают, когда разные данные дают одинаковый хеш-код. В HashMap это приводит к тому, что несколько объектов попадают в одну корзину (bucket).
Как обрабатываются:
- При коллизии элементы хранятся в виде связного списка (до Java 8)
- В Java 8+ при достижении порога (обычно 8 элементов) список преобразуется в сбалансированное дерево для улучшения производительности с O(n) до O(log n)
Пример:
Map<String, String> map = new HashMap<>();
map.put("Aa", "1"); // Хеш 2112
map.put("BB", "2"); // Тот же хеш 2112 -> коллизия
Как избежать:
- Правильно реализовывать
hashCode()иequals() - Использовать хорошие хеш-функции с равномерным распределением