Получить доступ

Какой ценой LinkedHashMap поддерживает предсказуемый порядок обхода по сравнению с HashMap?

MiddleКоллекции
Коротко

Цена — две дополнительные ссылки на запись и поддержка списка при вставке и удалении. get и put остаются O(1); обход даже быстрее — по списку, а не по всем корзинам.

  • Память — главная плата
  • Обход пропорционален размеру, а не ёмкости

А ещё Для огромных карт разница в памяти заметна

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Внутри это та же хеш-таблица с теми же бакетами, поэтому get и put сохраняют константную сложность в среднем. Добавлен лишь двусвязный список, прошивающий все записи, — отсюда две дополнительные ссылки в каждой записи и необходимость поддерживать список при вставке и удалении. Интересно, что обход при этом может оказаться даже быстрее: HashMap при итерации вынужден проходить весь массив бакетов, включая пустые, а LinkedHashMap идёт строго по цепочке живых записей, что заметно на разреженной карте.

Что хотят услышать

  • Память и стоимость изменений.
  • Сохранение сложности.

Частые ошибки

  • Думать, что порядок обеспечивается сортировкой.
  • Считать, что за порядок платят сложностью поиска.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Каждая запись хранит две дополнительные ссылки для двусвязного списка — больше памяти и немного дороже вставка и удаление
  • ✗Поиск по ключу становится O(log n) вместо O(1)
  • ✗Записи хранятся отсортированными, поэтому вставка стоит O(n)
  • ✗Никакой цены нет: LinkedHashMap во всём не хуже HashMap

Что спросят дальше

  • Почему обход LinkedHashMap может быть быстрее, чем у HashMap?
  • Когда предсказуемый порядок обхода реально нужен?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем