Ответ вслух Junior Коллекции изнутри обновлено

Как выбрать коллекцию

Вопрос

Как вы выбираете коллекцию под задачу? Пройдитесь по основным реализациям.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинаю с вопросов: нужен ли порядок, доступ по индексу, уникальность, сортировка. Список по умолчанию ArrayList: компактный, доступ O(1), быстрый обход.

Что должно прозвучать в ответе

  • 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 ошибок.

Термины по теме