Deque

Базовый Algorithms
≈ 1 мин чтения

Два конца одной структуры

Deque (double-ended queue) — двусторонняя очередь. В отличие от обычной очереди, она позволяет добавлять, смотреть и удалять элементы как с начала, так и с конца. Поэтому один deque может использоваться и как стек, и как очередь, а иногда алгоритму действительно нужны оба конца одновременно.

Deque<Integer> deque = new ArrayDeque<>();

deque.addFirst(20);
deque.addFirst(10);
deque.addLast(30);

int left = deque.removeFirst(); // 10
int right = deque.removeLast(); // 30

После этих операций в структуре останется только 20. У ArrayDeque операции на обоих концах выполняются за O(1) амортизированно.

Выбирай методы по роли структуры

Интерфейс Deque содержит много похожих методов. Если используешь его как стек, удобно придерживаться push, pop, peek. Если как очередь — явно работать через addLast, removeFirst и peekFirst. Так направление движения данных видно прямо из кода.

ArrayDeque не допускает null. Это полезно помнить, потому что null у некоторых методов очереди используется как признак отсутствия элемента.