Как связаны интерфейс Queue и класс LinkedList в Java?

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

Ответ

Класс LinkedList в Java является одной из конкретных реализаций интерфейса Queue. Это означает, что LinkedList можно использовать там, где требуется очередь (FIFO - First-In-First-Out).

Иерархия: LinkedListDequeQueueCollection Поскольку LinkedList реализует Deque (двусторонняя очередь), он автоматически реализует и Queue.

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

import java.util.LinkedList;
import java.util.Queue;

Queue<String> taskQueue = new LinkedList<>();

// Добавление элементов в конец очереди
taskQueue.offer("Task1"); // Предпочтительный метод (не бросает исключение)
taskQueue.add("Task2");   // Может выбросить IllegalStateException

// Просмотр головного элемента без удаления
String head = taskQueue.peek(); // "Task1"

// Извлечение и удаление головного элемента
String processed = taskQueue.poll(); // Удаляет и возвращает "Task1"

System.out.println(taskQueue); // Вывод: [Task2]
Ключевые методы Queue, доступные в LinkedList: Метод Действие Исключение при ошибке
offer(E e) Добавляет элемент в конец очереди. Возвращает false.
poll() Удаляет и возвращает головной элемент. Возвращает null.
peek() Возвращает головной элемент без удаления. Возвращает null.
add(E e) Добавляет элемент в конец очереди. IllegalStateException
remove() Удаляет и возвращает головной элемент. NoSuchElementException
element() Возвращает головной элемент без удаления. NoSuchElementException

Важное замечание: LinkedList как реализация Queue не является потокобезопасной. Для многопоточных сценариев следует использовать специализированные классы из пакета java.util.concurrent, например ConcurrentLinkedQueue или ArrayBlockingQueue.