Вопрос на собеседовании · Java-разработчик
Как устроена HashMap внутри?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
HashMap хранит записи в массиве бакетов. Из hashCode ключа вычисляется индекс бакета, а внутри бакета нужный ключ определяется через equals. Коллизии неизбежны: разные ключи могут попасть в один бакет.
В современных реализациях Java длинная цепочка при определённых условиях может быть преобразована в дерево. При росте заполнения таблица расширяется, а записи перераспределяются. В среднем get и put работают за O(1), но это не безусловная гарантия для любого набора ключей.
01 · Структура ответа
Что важно сказать интервьюеру
Раскройте тезисы, которые относятся именно к этому вопросу, и поясните их на собственном примере:
02 · Пример
Как объяснить на практике
Если объект User используется как ключ и его hashCode зависит от изменяемого email, смена email после put может отправить поиск в другой бакет. Запись физически останется в карте, но get по изменённому объекту её не найдёт.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Что происходит при resize?
- Почему ключ лучше делать неизменяемым?
- Чем ConcurrentHashMap отличается от HashMap?
05 · Проверка фактов
Первоисточники по теме
Ссылки ниже помогают проверить понятия, методы и ограничения по теме. Они не являются доказательством того, что этот вопрос задают на каждом собеседовании.
- Oracle Java API: HashMap — Контракт HashMap, порядок и конкурентный доступ.
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.
Mira