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

Нужно быстро находить ближайшую запись с ключом не больше заданного и выбирать все записи в диапазоне дат. Какая структура подходит?

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

TreeMap как NavigableMap: floorKey/ceilingKey/lowerKey/higherKey и subMap, headMap, tailMap за O(log n). Хеш-таблица порядок не хранит.

  • Красно-чёрное дерево
  • Многопоточно — ConcurrentSkipListMap
  • Пример: тарифная сетка по датам — floorEntry(дата)

А ещё Диапазон subMap — представление, а не копия

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

Попробуйте сами

Дерево поиска: вставка, поиск, повороты AVL

Подробно

Хеш-таблица не хранит порядок, поэтому любой запрос «ближайший» или «в диапазоне» вырождается в полный перебор. TreeMap построен на красно-чёрном дереве, все операции стоят O(log n), а навигационные методы дают ровно нужную семантику: floorKey — наибольший ключ не больше заданного, ceilingKey — наименьший не меньше, subMap — представление на диапазон. Важная деталь: subMap возвращает именно представление, а не копию, поэтому изменения видны в обе стороны, и запись за границы диапазона бросит IllegalArgumentException.

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

  • Выбор TreeMap и навигационные методы.
  • Сложность и конкурентная альтернатива.

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

  • Сортировать ключи HashMap на каждый запрос диапазона.
  • Считать subMap независимой копией.

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

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

Показать варианты и ответ
  • ✓TreeMap: как NavigableMap он даёт floorKey/ceilingKey и subMap за логарифмическое время
  • ✗HashMap с последующей сортировкой ключей при каждом запросе
  • ✗LinkedHashMap в порядке вставки
  • ✗ArrayList с линейным поиском

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

  • Чем floorKey отличается от lowerKey?
  • Можно ли положить null-ключ в TreeMap?

Разбор темы

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

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

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

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

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