Ответ
Ключ null всегда помещается в бакет 0, независимо от реализации hashCode(). Константный hashCode() влияет только на не-null ключи, вызывая коллизии и вырождение производительности до O(n).
Пример:
HashMap<String, String> map = new HashMap<>();
map.put(null, "valueNull"); // Бакет 0
map.put("key1", "value1"); // Коллизия, если hashCode("key1") == const
map.put("key2", "value2"); // Еще одна коллизия в том же бакете
Важно:
- Начиная с Java 8, при превышении порога (
TREEIFY_THRESHOLD = 8) связный список в бакете преобразуется в красно-черное дерево, улучшая поиск до O(log n). - Для
null-ключаhashCode()не вызывается, используется фиксированный хэш0.