Расскажите про контракт equals/hashCode. Что случится с HashMap при константном hashCode?

Ответ

Если a.equals(b), то hashCode одинаков. Обратное необязательно. При константном hashCode — все в одном bucket: Java 7 — список O(n), Java 8+ при 8 коллизиях — red-black tree O(log n). Деградация производительности поиска с O(1) до O(n) или O(log n).

Разбор: Если equals равны — hashCode обязан совпадать, обратное необязательно; константный hashCode загоняет все записи в один бакет, и поиск деградирует до O(n) (Java 7 — связный список), а в Java 8+ при 8+ коллизиях бакет превращается в красно-чёрное дерево с O(log n). Ловушки отрицают деградацию, путают структуру внутри бакета или ошибочно утверждают, что get перестанет находить ключи (equals как раз и вызывается при совпадении хеша).

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться