Интерфейс 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() |
Возвращает представление этой коллекции в обратном порядке. |
int |
size() |
Возвращает количество элементов в этом деке. |
Методы, объявленные в интерфейсе Collection
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Удаляет все элементы из этой коллекции (необязательная операция). |
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода этой коллекции. |
boolean |
isEmpty() |
Возвращает true, если эта коллекция не содержит элементов. |
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция. |
boolean |
removeAll |
Удаляет из этой коллекции все ее элементы, которые также содержатся в указанной коллекции (необязательная операция). |
default boolean |
removeIf |
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). |
default Spliterator |
spliterator() |
Создает Spliterator для элементов этой коллекции. |
default Stream |
stream() |
Возвращает последовательный Stream, источником которого является эта коллекция. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой коллекции. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
<T> T[] |
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.