Как организован доступ к элементам в интерфейсе Queue (очередь)?

«Как организован доступ к элементам в интерфейсе Queue (очередь)?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс Queue<E> в Java моделирует классическую очередь FIFO (First-In-First-Out). Доступ к элементам строго регламентирован: добавление происходит в конец (tail), а выборка и удаление — из начала (head).

Основные методы:

Метод Действие Поведение при ошибке
boolean offer(E e) Добавляет элемент в конец очереди. Возвращает false при неудаче (например, в ограниченной очереди).
E poll() Удаляет и возвращает элемент из начала очереди. Возвращает null, если очередь пуста.
E peek() Возвращает элемент из начала очереди без удаления. Возвращает null, если очередь пуста.
boolean add(E e) Добавляет элемент в конец. Выбрасывает IllegalStateException, если элемент добавить нельзя.
E remove() Удаляет и возвращает элемент из начала. Выбрасывает NoSuchElementException, если очередь пуста.
E element() Возвращает элемент из начала без удаления. Выбрасывает NoSuchElementException, если очередь пуста.

Пример работы FIFO-очереди:

Queue<String> queue = new LinkedList<>();
queue.offer("First");  // Очередь: [First]
queue.offer("Second"); // Очередь: [First, Second]

String head = queue.peek(); // head = "First", Очередь: [First, Second]
String removed = queue.poll(); // removed = "First", Очередь: [Second]

Важно: Интерфейс Deque (двусторонняя очередь) расширяет Queue и позволяет добавлять/удалять элементы с обоих концов.