Что такое Deque в Java и каковы его основные характеристики?

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

Ответ

Deque (Double Ended Queue — «двусторонняя очередь») — это интерфейс в Java Collections Framework, который расширяет интерфейс Queue. Он позволяет добавлять, просматривать и удалять элементы как с начала (головы), так и с конца (хвоста) структуры данных.

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

Действие Начало очереди (First) Конец очереди (Last)
Добавить addFirst(e), offerFirst(e) addLast(e), offerLast(e)
Удалить removeFirst(), pollFirst() removeLast(), pollLast()
Просмотреть getFirst(), peekFirst() getLast(), peekLast()

Основные реализации:

  • ArrayDeque: Реализация на основе изменяемого массива. Является предпочтительным выбором для использования в качестве стека (push/pop) или очереди, так как работает быстрее LinkedList и потребляет меньше памяти. Не потокобезопасна.
  • LinkedList: Реализация на основе двусвязного списка. Помимо Deque, также реализует интерфейс List, что дает доступ по индексу, но с меньшей производительностью для операций очереди.

Пример использования в качестве стека (LIFO):

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); // addFirst
stack.push(2);
int top = stack.pop(); // removeFirst -> вернет 2

Пример использования в качестве очереди (FIFO):

Deque<String> queue = new ArrayDeque<>();
queue.offerLast("First"); // addLast
queue.offerLast("Second");
String first = queue.pollFirst(); // removeFirst -> вернет "First"

Области применения: алгоритмы обхода графов (BFS, DFS), реализация кэшей (например, LRU), обработка потоков данных.