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

Нужна очередь FIFO внутри одного потока. Что выбрать по умолчанию?

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

ArrayDeque: кольцевой массив, offer и poll — O(1), без узла на элемент и промахов кэша.

  • LinkedList — тоже Deque, но медленнее
  • ArrayList для очереди не годится: удаление из начала сдвигает всё
  • Между потоками — блокирующие очереди

А ещё Null-элементы недопустимы

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

Подробно

LinkedList действительно реализует Deque, но платит объектом-узлом за каждый элемент и разбросанностью по куче. ArrayDeque хранит элементы в кольцевом массиве, поэтому добавление и снятие с обоих концов константны и дружелюбны к кэшу. ArrayList для очереди не годится: удаление из начала сдвигает весь хвост. PriorityQueue — это куча, она выдаёт элементы по приоритету, а не в порядке поступления, и порядок её итератора вообще не определён. Ограничения ArrayDeque стоит знать: он не допускает null-элементов и не является потокобезопасным — для обмена между потоками берут реализации BlockingQueue.

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

  • Выбор ArrayDeque и почему не LinkedList и ArrayList.

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

  • Использовать ArrayList как очередь.
  • Ожидать от PriorityQueue порядка FIFO или упорядоченной итерации.

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

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

Показать варианты и ответ
  • ✓ArrayDeque — кольцевой буфер без выделения узла на элемент, обычно быстрее LinkedList
  • ✗LinkedList, потому что он реализует Deque и оптимизирован под очередь
  • ✗ArrayList с удалением из начала
  • ✗PriorityQueue без компаратора

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

  • Почему ArrayDeque запрещает null?
  • Что выбрать для передачи задач между потоками?

Разбор темы

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

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

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

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

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