Интерфейс Deque<E>
- Параметры типа:
E- тип элементов, хранящихся в этой двусторонней очереди
- Все супертипы:
Collection<E>, Iterable<E>, Queue<E>, SequencedCollection<E>
- Все известные подтипы:
BlockingDeque<E>
- Все известные реализующие классы:
ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList
public interface Deque<E> extends Queue<E>, SequencedCollection<E>
Deque не устанавливают фиксированных ограничений на количество содержащихся в них элементов, однако этот интерфейс поддерживает как двусторонние очереди с ограниченной емкостью, так и очереди без фиксированного ограничения размера. Этот интерфейс определяет методы доступа к элементам с обоих концов двусторонней очереди. Предусмотрены методы для вставки, удаления и просмотра элемента. Каждый из этих методов существует в двух вариантах: один выбрасывает исключение при неудачном выполнении операции, другой возвращает специальное значение (либо null, либо false, в зависимости от операции). Последний вариант операции вставки предназначен специально для использования с реализациями Deque с ограниченной емкостью; в большинстве реализаций операции вставки не могут завершиться неудачей.
Двенадцать описанных выше методов сведены в следующую таблицу:
| Первый элемент (голова) | Последний элемент (хвост) | |||
|---|---|---|---|---|
| Выбрасывает исключение | Специальное значение | Выбрасывает исключение | Специальное значение | |
| Вставка | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
| Удаление | removeFirst() | pollFirst() | removeLast() | pollLast() |
| Просмотр | getFirst() | peekFirst() | getLast() | peekLast() |
Этот интерфейс расширяет интерфейс Queue. При использовании двусторонней очереди как обычной очереди реализуется поведение FIFO (первым пришел — первым ушел). Элементы добавляются в конец двусторонней очереди и удаляются из ее начала. Методы, унаследованные от интерфейса Queue, в точности эквивалентны методам Deque, как показано в следующей таблице:
Метод Queue | Эквивалентный метод Deque |
|---|---|
add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
Двусторонние очереди также можно использовать как стеки LIFO (последним пришел — первым ушел). Этот интерфейс предпочтительнее устаревшего класса Stack. При использовании двусторонней очереди как стека элементы помещаются в стек и извлекаются из его начала. Методы стека эквивалентны методам Deque, как показано в таблице ниже:
| Метод Stack | Эквивалентный метод Deque |
|---|---|
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |
Обратите внимание, что метод peek одинаково хорошо работает как при использовании двусторонней очереди в качестве обычной очереди, так и в качестве стека; в обоих случаях элементы извлекаются из начала двусторонней очереди.
Этот интерфейс предоставляет два метода для удаления внутренних элементов: removeFirstOccurrence и removeLastOccurrence.
В отличие от интерфейса List, этот интерфейс не предоставляет возможности индексированного доступа к элементам.
Хотя реализации Deque не обязаны строго запрещать вставку элементов null, настоятельно рекомендуется это делать. Пользователям любых реализаций Deque, допускающих элементы null, настоятельно рекомендуется не использовать возможность вставки значений null. Это связано с тем, что null используется различными методами в качестве специального возвращаемого значения, указывающего на то, что двусторонняя очередь пуста.
Реализации Deque обычно не определяют версии методов equals и hashCode, основанные на сравнении элементов, а наследуют версии, основанные на идентичности объектов, от класса Object.
Этот интерфейс входит в состав Java Collections Framework.
- Начиная с версии:
- 1.6
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), если это можно сделать немедленно, не нарушая ограничений емкости; при успешном выполнении возвращает true, а если свободного места в данный момент нет — выбрасывает IllegalStateException. |
boolean |
addAll |
Добавляет все элементы указанной коллекции в конец этой двусторонней очереди, как если бы для каждого из них в порядке, возвращаемом итератором коллекции, был вызван метод addLast(E). |
void |
addFirst |
Вставляет указанный элемент в начало этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места в данный момент нет, выбрасывает IllegalStateException. |
void |
addLast |
Вставляет указанный элемент в конец этой двусторонней очереди, если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места в данный момент нет, выбрасывает IllegalStateException. |
boolean |
contains |
Возвращает true, если эта двусторонняя очередь содержит указанный элемент. |
Iterator |
descendingIterator() |
Возвращает итератор по элементам этой двусторонней очереди в обратном последовательном порядке. |
E |
element() |
Возвращает голову очереди, представленной этой двусторонней очередью (иначе говоря, ее первый элемент), не удаляя ее. |
E |
getFirst() |
Возвращает первый элемент этой двусторонней очереди, не удаляя его. |
E |
getLast() |
Возвращает последний элемент этой двусторонней очереди, не удаляя его. |
Iterator |
iterator() |
Возвращает итератор по элементам этой двусторонней очереди в обычном порядке. |
boolean |
offer |
Вставляет указанный элемент в очередь, представленную этой двусторонней очередью (иначе говоря, в ее хвост), если это можно сделать немедленно, не нарушая ограничений емкости; при успешном выполнении возвращает true, а если свободного места в данный момент нет — false. |
boolean |
offerFirst |
Вставляет указанный элемент в начало этой двусторонней очереди, если это не нарушает ограничений емкости. |
boolean |
offerLast |
Вставляет указанный элемент в конец этой двусторонней очереди, если это не нарушает ограничений емкости. |
E |
peek() |
Возвращает голову очереди, представленной этой двусторонней очередью (иначе говоря, ее первый элемент), не удаляя ее, или возвращает null, если двусторонняя очередь пуста. |
E |
peekFirst() |
Возвращает первый элемент этой двусторонней очереди, не удаляя его, или возвращает null, если двусторонняя очередь пуста. |
E |
peekLast() |
Возвращает последний элемент этой двусторонней очереди, не удаляя его, или возвращает null, если двусторонняя очередь пуста. |
E |
poll() |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, ее первый элемент), или возвращает null, если двусторонняя очередь пуста. |
E |
pollFirst() |
Извлекает и удаляет первый элемент этой двусторонней очереди или возвращает null, если двусторонняя очередь пуста. |
E |
pollLast() |
Извлекает и удаляет последний элемент этой двусторонней очереди или возвращает null, если двусторонняя очередь пуста. |
E |
pop() |
Извлекает элемент из стека, представленного этой двусторонней очередью. |
void |
push |
Помещает элемент в стек, представленный этой двусторонней очередью (иначе говоря, в ее голову), если это можно сделать немедленно, не нарушая ограничений емкости; если свободного места в данный момент нет, выбрасывает IllegalStateException. |
E |
remove() |
Извлекает и удаляет голову очереди, представленной этой двусторонней очередью (иначе говоря, ее первый элемент). |
boolean |
remove |
Удаляет первое вхождение указанного элемента из этой двусторонней очереди. |
E |
removeFirst() |
Извлекает и удаляет первый элемент этой двусторонней очереди. |
boolean |
removeFirstOccurrence |
Удаляет первое вхождение указанного элемента из этой двусторонней очереди. |
E |
removeLast() |
Извлекает и удаляет последний элемент этой двусторонней очереди. |
boolean |
removeLastOccurrence |
Удаляет последнее вхождение указанного элемента из этой двусторонней очереди. |
default Deque |
reversed() |
Возвращает представление view этой коллекции в обратном порядке. |
int |
size() |
Возвращает количество элементов в этой двусторонней очереди. |
Методы, объявленные в интерфейсе Collection
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
Подробное описание методов
addFirst
void addFirst(E e)
IllegalStateException. При использовании двусторонней очереди с ограниченной емкостью обычно предпочтительнее метод offerFirst(E).- Указан в:
-
addFirstв интерфейсеSequencedCollection<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
IllegalStateException— если в данный момент элемент нельзя добавить из-за ограничений емкости -
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
addLast
void addLast(E e)
IllegalStateException. При использовании двусторонней очереди с ограниченной емкостью обычно предпочтительнее метод offerLast(E). Этот метод эквивалентен add(E).
- Указан в:
-
addLastв интерфейсеSequencedCollection<E> - Параметры:
-
e— добавляемый элемент - Исключения:
-
IllegalStateException— если в данный момент элемент нельзя добавить из-за ограничений емкости -
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
offerFirst
boolean offerFirst(E e)
addFirst(E), который может не вставить элемент только путем выбрасывания исключения.- Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент был добавлен в эту двустороннюю очередь; в противном случае —false - Исключения:
-
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
offerLast
boolean offerLast(E e)
addLast(E), который может не вставить элемент только путем выбрасывания исключения.- Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент был добавлен в эту двустороннюю очередь; в противном случае —false - Исключения:
-
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
removeFirst
E removeFirst()
pollFirst только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста.- Указан в:
-
removeFirstв интерфейсеSequencedCollection<E> - Возвращает:
- голову этой двусторонней очереди
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
removeLast
E removeLast()
pollLast только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста.- Указан в:
-
removeLastв интерфейсеSequencedCollection<E> - Возвращает:
- хвост этой двусторонней очереди
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
pollFirst
E pollFirst()
null, если эта двусторонняя очередь пуста.- Возвращает:
- голову этой двусторонней очереди или
null, если эта двусторонняя очередь пуста
pollLast
E pollLast()
null, если эта двусторонняя очередь пуста.- Возвращает:
- хвост этой двусторонней очереди или
null, если эта двусторонняя очередь пуста
getFirst
E getFirst()
peekFirst только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста.- Указан в:
-
getFirstв интерфейсеSequencedCollection<E> - Возвращает:
- голову этой двусторонней очереди
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
getLast
E getLast()
peekLast только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста.- Указан в:
-
getLastв интерфейсеSequencedCollection<E> - Возвращает:
- хвост этой двусторонней очереди
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
peekFirst
E peekFirst()
null, если эта двусторонняя очередь пуста.- Возвращает:
- голову этой двусторонней очереди или
null, если эта двусторонняя очередь пуста
peekLast
E peekLast()
null, если эта двусторонняя очередь пуста.- Возвращает:
- хвост этой двусторонней очереди или
null, если эта двусторонняя очередь пуста
removeFirstOccurrence
boolean removeFirstOccurrence(Object o)
e, для которого выполняется условие Objects.equals(o, e) (если такой элемент существует). Возвращает true, если эта двусторонняя очередь содержала указанный элемент (или, что эквивалентно, если в результате вызова очередь изменилась).- Параметры:
-
o— элемент, который следует удалить из этой двусторонней очереди, если он присутствует - Возвращает:
-
true, если в результате вызова элемент был удален - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этой двусторонней очередью (необязательно) -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null (необязательно)
removeLastOccurrence
boolean removeLastOccurrence(Object o)
e, для которого выполняется условие Objects.equals(o, e) (если такой элемент существует). Возвращает true, если эта двусторонняя очередь содержала указанный элемент (или, что эквивалентно, если в результате вызова очередь изменилась).- Параметры:
-
o— элемент, который следует удалить из этой двусторонней очереди, если он присутствует - Возвращает:
-
true, если в результате вызова элемент был удален - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этой двусторонней очередью (необязательно) -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null (необязательно)
add
boolean add(E e)
true, а если свободного места в данный момент нет, выбрасывает IllegalStateException. При использовании двусторонней очереди с ограниченной емкостью обычно предпочтительнее использовать offer. Этот метод эквивалентен addLast(E).
- Указан в:
-
addв интерфейсеCollection<E> - Указан в:
-
addв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true(как указано вCollection.add(E)) - Исключения:
-
IllegalStateException— если в данный момент элемент нельзя добавить из-за ограничений емкости -
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
offer
boolean offer(E e)
true, а если свободного места в данный момент нет — false. При использовании двусторонней очереди с ограниченной емкостью этот метод обычно предпочтительнее метода add(E), который может не вставить элемент только путем выбрасывания исключения. Этот метод эквивалентен offerLast(E).
- Указан в:
-
offerв интерфейсеQueue<E> - Параметры:
-
e— добавляемый элемент - Возвращает:
-
true, если элемент был добавлен в эту двустороннюю очередь; в противном случае —false - Исключения:
-
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
remove
E remove()
poll() только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста. Этот метод эквивалентен removeFirst().
- Указан в:
-
removeв интерфейсеQueue<E> - Возвращает:
- голову очереди, представленной этой двусторонней очередью
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
poll
E poll()
null, если эта двусторонняя очередь пуста. Этот метод эквивалентен pollFirst().
element
E element()
peek только тем, что выбрасывает исключение, если эта двусторонняя очередь пуста. Этот метод эквивалентен getFirst().
- Указан в:
-
elementв интерфейсеQueue<E> - Возвращает:
- голову очереди, представленной этой двусторонней очередью
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
peek
E peek()
null, если эта двусторонняя очередь пуста. Этот метод эквивалентен peekFirst().
addAll
boolean addAll(Collection<? extends E> c)
addLast(E). При использовании двусторонней очереди с ограниченной емкостью обычно предпочтительнее отдельно вызывать offer для каждого элемента.
Исключение, возникшее при попытке добавить элемент, может привести к тому, что к моменту выбрасывания соответствующего исключения будут успешно добавлены лишь некоторые элементы.
- Указан в:
-
addAllв интерфейсеCollection<E> - Параметры:
-
c— элементы, которые следует добавить в эту двустороннюю очередь - Возвращает:
-
true, если в результате вызова эта двусторонняя очередь изменилась - Исключения:
-
IllegalStateException— если в данный момент нельзя добавить все элементы из-за ограничений на вставку -
ClassCastException— если класс элемента указанной коллекции препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанная коллекция содержит элемент null, а эта двусторонняя очередь не допускает элементы null, или если указанная коллекция равна null -
IllegalArgumentException— если какое-либо свойство элемента указанной коллекции препятствует его добавлению в эту двустороннюю очередь - См. также:
push
void push(E e)
IllegalStateException. Этот метод эквивалентен addFirst(E).
- Параметры:
-
e— помещаемый в стек элемент - Исключения:
-
IllegalStateException— если в данный момент элемент нельзя добавить из-за ограничений емкости -
ClassCastException— если класс указанного элемента препятствует его добавлению в эту двустороннюю очередь -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null -
IllegalArgumentException— если какое-либо свойство указанного элемента препятствует его добавлению в эту двустороннюю очередь
pop
E pop()
Этот метод эквивалентен removeFirst().
- Возвращает:
- элемент в начале этой двусторонней очереди (то есть вершину стека, представленного этой двусторонней очередью)
- Исключения:
-
NoSuchElementException— если эта двусторонняя очередь пуста
remove
boolean remove(Object o)
e, для которого выполняется условие Objects.equals(o, e) (если такой элемент существует). Возвращает true, если эта двусторонняя очередь содержала указанный элемент (или, что эквивалентно, если в результате вызова очередь изменилась). Этот метод эквивалентен removeFirstOccurrence(Object).
- Указан в:
-
removeв интерфейсеCollection<E> - Параметры:
-
o— элемент, который следует удалить из этой двусторонней очереди, если он присутствует - Возвращает:
-
true, если в результате вызова элемент был удален - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этой двусторонней очередью (необязательно) -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null (необязательно)
contains
boolean contains(Object o)
true, если эта двусторонняя очередь содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда эта двусторонняя очередь содержит хотя бы один элемент e, для которого выполняется условие Objects.equals(o, e).- Указан в:
-
containsв интерфейсеCollection<E> - Параметры:
-
o— элемент, наличие которого в этой двусторонней очереди проверяется - Возвращает:
-
true, если эта двусторонняя очередь содержит указанный элемент - Исключения:
-
ClassCastException— если класс указанного элемента несовместим с этой двусторонней очередью (необязательно) -
NullPointerException— если указанный элемент равен null, а эта двусторонняя очередь не допускает элементы null (необязательно)
size
int size()
- Указан в:
-
sizeв интерфейсеCollection<E> - Возвращает:
- количество элементов в этой двусторонней очереди
iterator
Iterator<E> iterator()
descendingIterator
Iterator<E> descendingIterator()
- Возвращает:
- итератор для обхода элементов этой двусторонней очереди в обратном порядке
reversed
default Deque<E> reversed()
- Указан в:
-
reversedв интерфейсеSequencedCollection<E> - Требования к реализации:
- Реализация в этом интерфейсе возвращает представление Deque с обратным порядком элементов. Метод
reversed()этого представления возвращает ссылку на эту Deque. Остальные операции над представлением реализуются посредством вызовов открытых методов этой Deque. Точная связь между вызовами представления и вызовами этой Deque не определена. Однако операции, зависящие от порядка, обычно ведут себя так, как если бы они делегировали вызов соответствующему методу с обратной ориентацией. Например, вызовgetFirstдля представления может привести к вызовуgetLastдля этой Deque. - Возвращает:
- представление этой коллекции с обратным порядком элементов, имеющее тип
Deque - Начиная с:
- 21
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Deque.html