Нужна структура с быстрым поиском по ключу, которая при обходе отдаёт элементы в порядке их добавления. Что выбрать?
LinkedHashMap: поиск по ключу O(1) и обход в порядке добавления.
- HashMap — быстро, но порядок не определён
- TreeMap — порядок по ключу, а не по времени, O(log n)
- Список пар — линейный поиск
А ещё В многопоточном коде такого готового класса нет — синхронизация или ConcurrentHashMap + отдельная очередь
Подробно
HashMap даёт нужную скорость, но порядок обхода у него не определён и меняется при перехешировании. TreeMap упорядочивает по ключу, а не по времени добавления, и стоит O(log n). Список пар потребует линейного поиска. LinkedHashMap решает задачу точно: та же хеш-таблица плюс двусвязный список, прошивающий записи в порядке вставки. Общий подход к таким вопросам — сначала сформулировать паттерн доступа (поиск, обход, диапазоны, порядок), и структура выбирается почти однозначно.
Что хотят услышать
- Выбор и сравнение с альтернативами.
Частые ошибки
- Полагаться на порядок обхода HashMap: он не гарантирован.
- Путать порядок вставки с сортировкой по ключу.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓LinkedHashMap
- ✗TreeMap
- ✗HashMap
- ✗ArrayList пар ключ-значение
Что спросят дальше
- Что изменится, если нужны ещё и запросы по диапазону ключей?
- Какой ценой LinkedHashMap поддерживает порядок?
Разбор темы
- Collections Framework: карта и выбор структуры
Иерархия интерфейсов, сложности операций основных структур, неизменяемые коллекции и принцип выбора по паттерну доступа.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.