Ответ
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), обработка потоков данных.