Коллекции middle
Расскажите про контракт 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.