Что такое очередь (Queue) в контексте структур данных?

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

Ответ

Очередь (Queue) — это абстрактная структура данных, работающая по принципу FIFO (First In, First Out): первый добавленный элемент будет первым извлеченным.

Ключевые операции:

  • Добавление (Enqueue): Элемент помещается в конец очереди.
  • Удаление (Dequeue): Элемент извлекается из начала очереди.

Реализация в Java: Интерфейс java.util.Queue расширяет Collection. Основные реализации:

  • LinkedList — двусторонняя очередь, также реализует Deque.
  • ArrayDeque — эффективная реализация на массиве.
  • PriorityQueue — очередь с приоритетом (FIFO не гарантируется).
Основные методы: Метод Генерирует исключение? Возвращает null/false? Действие
add(e) / offer(e) IllegalStateException false (только offer) Добавляет элемент в конец.
remove() / poll() NoSuchElementException null (только poll) Удаляет и возвращает элемент из начала.
element() / peek() NoSuchElementException null (только peek) Возвращает элемент из начала без удаления.

Пример использования LinkedList как очереди:

Queue<String> queue = new LinkedList<>();
queue.offer("First");
queue.offer("Second");
queue.offer("Third");

System.out.println(queue.poll()); // "First"
System.out.println(queue.peek()); // "Second"
System.out.println(queue.poll()); // "Second"

Области применения: управление задачами (например, в пуле потоков), обработка запросов, алгоритмы обхода графа (BFS).