Как выбрать коллекцию
Вопрос
Как вы выбираете коллекцию под задачу? Пройдитесь по основным реализациям.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
ArrayList по умолчанию для списков
ArrayDeque для стека и очереди вместо Stack и LinkedList
HashSet/HashMap для быстрого поиска
LinkedHashMap для порядка вставки и LRU
TreeMap/TreeSet для сортировки и поиска ближайшего ключа
PriorityQueue для top-k и планировщиков
Что могут спросить следом
- Когда LinkedList действительно оправдан?
- Что выбрать для многопоточного доступа?
Разбор
Начинаю с вопросов: нужен ли порядок, доступ по индексу, уникальность, сортировка. Список по умолчанию ArrayList: компактный, доступ O(1), быстрый обход. Стек и очередь ArrayDeque, а не Stack (синхронизирован и наследует Vector) и не LinkedList. Поиск по ключу или проверка вхождения HashMap/HashSet, O(1) в среднем. Нужен порядок вставки или LRU, беру LinkedHashMap. Нужны отсортированные ключи, диапазоны, ближайший больший или меньший, TreeMap с O(log n). Top-k и задачи по приоритету решает PriorityQueue. LinkedList оправдан редко, по факту ArrayDeque и ArrayList быстрее из-за локальности памяти. Для многопоточности отдельный набор: ConcurrentHashMap, CopyOnWriteArrayList, блокирующие очереди.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.