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

Нужна структура с быстрым поиском по ключу, которая при обходе отдаёт элементы в порядке их добавления. Что выбрать?

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

LinkedHashMap: поиск по ключу O(1) и обход в порядке добавления.

  • HashMap — быстро, но порядок не определён
  • TreeMap — порядок по ключу, а не по времени, O(log n)
  • Список пар — линейный поиск

А ещё В многопоточном коде такого готового класса нет — синхронизация или ConcurrentHashMap + отдельная очередь

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

Подробно

HashMap даёт нужную скорость, но порядок обхода у него не определён и меняется при перехешировании. TreeMap упорядочивает по ключу, а не по времени добавления, и стоит O(log n). Список пар потребует линейного поиска. LinkedHashMap решает задачу точно: та же хеш-таблица плюс двусвязный список, прошивающий записи в порядке вставки. Общий подход к таким вопросам — сначала сформулировать паттерн доступа (поиск, обход, диапазоны, порядок), и структура выбирается почти однозначно.

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

  • Выбор и сравнение с альтернативами.

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

  • Полагаться на порядок обхода HashMap: он не гарантирован.
  • Путать порядок вставки с сортировкой по ключу.

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

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

Показать варианты и ответ
  • ✓LinkedHashMap
  • ✗TreeMap
  • ✗HashMap
  • ✗ArrayList пар ключ-значение

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

  • Что изменится, если нужны ещё и запросы по диапазону ключей?
  • Какой ценой LinkedHashMap поддерживает порядок?

Разбор темы

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

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

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

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

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