Класс ConcurrentLinkedDeque<E>

Type Parameters:
E - тип элементов, хранимых в этом очереди с двухсторонним входом
Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, Deque<E>, Queue<E>
public class ConcurrentLinkedDeque<E>
extends AbstractCollection<E>
implements Deque<E>, Serializable

Неограниченная конкурентная очередь с двухсторонним входом (deque), основанная на связанных узлах. Конкурентные операции вставки, удаления и доступа выполняются безопасно для нескольких потоков. Очередь с двухсторонним входом является подходящим выбором, когда многие потоки будут совместно использовать доступ к общему набору. Как и большинство других реализаций конкурентных коллекций, этот класс не допускает использование null элементов.

Итераторы и разделители являются слабо согласованными.

Обратите внимание, что, в отличие от большинства коллекций, метод size является НЕ операцией с постоянной сложностью. Из-за асинхронной природы этих очередей с двухсторонним входом определение текущего количества элементов требует обхода элементов, и поэтому может сообщать неточные результаты, если эта коллекция изменяется во время обхода.

Массовые операции добавления, удаления или проверки нескольких элементов, такие как addAll(java.util.Collection<? extends E>), removeIf(java.util.function.Predicate<? super E>) или forEach(java.util.function.Consumer<? super E>), не гарантируются как выполняющиеся атомарно. Например, обход forEach , выполняемый одновременно с операцией addAll, может наблюдать только некоторые добавленные элементы.

Этот класс и его итератор реализуют все необязательные методы интерфейсов Deque и Iterator.

Эффекты согласованности памяти: Как и в других конкурентных коллекциях, действия в потоке до размещения объекта в ConcurrentLinkedDeque предшествуют действиям, последующим за доступом или удалением этого элемента из ConcurrentLinkedDeque в другом потоке.

Этот класс является частью Java Collections Framework.

С:
1.7
См. также:
Форматирование для сериализации

Конструкторы

Конструктор Описание
ConcurrentLinkedDeque()

Создает пустую очередь с двухсторонним входом.

ConcurrentLinkedDeque​(Collection<? extends E> c)

Создает очередь с двухсторонним входом, первоначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Методы

Модификатор и тип Метод Описание
boolean add​(E e)

Вставляет указанный элемент в хвост этой очереди с двухсторонним входом.

boolean addAll​(Collection<? extends E> c)

Добавляет все элементы в указанной коллекции в конец этой очереди с двухсторонним входом в порядке, в котором они возвращаются итератором указанной коллекции.

void addFirst​(E e)

Вставляет указанный элемент в начало этой очереди с двухсторонним входом.

void addLast​(E e)

Вставляет указанный элемент в конец этой очереди с двухсторонним входом.

void clear()

Удаляет все элементы из этой очереди с двухсторонним входом.

boolean contains​(Object o)

Возвращает true, если эта очередь с двухсторонним входом содержит указанный элемент.

Iterator<E> descendingIterator()

Возвращает итератор над элементами в этой очереди с двухсторонним входом в обратном порядке.

E element()

Возвращает, но не удаляет, голову очереди, представленной этой очередью с двухсторонним входом (иначе говоря, первый элемент этой очереди с двухсторонним входом).

void forEach​(Consumer<? super E> action)

Выполняет заданное действие для каждого элемента Iterable , пока все элементы не будут обработаны или действие не вызовет исключение.

E getFirst()

Возвращает, но не удаляет, первый элемент этой очереди с двухсторонним входом.

E getLast()

Возвращает, но не удаляет, последний элемент этой очереди с двухсторонним входом.

boolean isEmpty()

Возвращает true, если эта коллекция не содержит элементов.

Iterator<E> iterator()

Возвращает итератор над элементами в этой очереди с двухсторонним входом в правильной последовательности.

boolean offer​(E e)

Вставляет указанный элемент в хвост этой очереди с двухсторонним входом.

boolean offerFirst​(E e)

Вставляет указанный элемент в начало этой очереди с двухсторонним входом.

boolean offerLast​(E e)

Вставляет указанный элемент в конец этой очереди с двухсторонним входом.

E pop()

Извлекает элемент из стека, представленного этой очередью с двухсторонним входом.

void push​(E e)

Добавляет элемент в стек, представленный этой очередью с двухсторонним входом (иначе говоря, в начало этой очереди с двухсторонним входом), если это можно сделать немедленно без нарушения ограничений на емкость, выбрасывая IllegalStateException , если в настоящее время места нет.

E remove()

Извлекает и удаляет голову очереди, представленной этой очередью с двухсторонним входом (иначе говоря, первый элемент этой очереди с двухсторонним входом).

boolean remove​(Object o)

Удаляет первое вхождение указанного элемента из этой очереди с двухсторонним входом.

boolean removeAll​(Collection<?> c)

Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция).

E removeFirst()

Извлекает и удаляет первый элемент этой очереди с двухсторонним входом.

boolean removeFirstOccurrence​(Object o)

Удаляет первое вхождение указанного элемента из этой очереди с двухсторонним входом.

boolean removeIf​(Predicate<? super E> filter)

Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату.

E removeLast()

Извлекает и удаляет последний элемент этой очереди с двухсторонним входом.

boolean removeLastOccurrence​(Object o)

Удаляет последнее вхождение указанного элемента из этой очереди с двухсторонним входом.

boolean retainAll​(Collection<?> c)

Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция).

int size()

Возвращает количество элементов в этой очереди с двухсторонним входом.

Spliterator<E> spliterator()

Возвращает Spliterator над элементами в этой очереди с двухсторонним входом.

Object[] toArray()

Возвращает массив, содержащий все элементы в этой очереди с двухсторонним входом в правильной последовательности (от первого до последнего элемента).

<T> T[] toArray​(T[] a)

Возвращает массив, содержащий все элементы в этой очереди с двухсторонним входом в правильной последовательности (от первого до последнего элемента); тип времени выполнения возвращаемого массива такой же, как у заданного массива.

Методы, объявленные в классе java.util.AbstractCollection

containsAll, toString

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.util.Collection

containsAll, equals, hashCode, parallelStream, stream, toArray

Методы, объявленные в интерфейсе java.util.Deque

peek, peekFirst, peekLast, poll, pollFirst, pollLast

Конструкторы

ConcurrentLinkedDeque

public ConcurrentLinkedDeque()

Создает пустую очередь с двухсторонним входом.

ConcurrentLinkedDeque

public ConcurrentLinkedDeque(Collection<? extends E> c)

Создает очередь с двухсторонним входом, первоначально содержащую элементы заданной коллекции, добавленные в порядке обхода итератора коллекции.

Параметры:
c - коллекция элементов, которые должны быть первоначально содержаться
Исключения:
NullPointerException - если указанная коллекция или любой из ее элементов равны null

Методы

addFirst

public void addFirst(E e)

Вставляет указанный элемент в начало этого дека. Поскольку дек неограничен, этот метод никогда не бросит IllegalStateException.

Определено в:
addFirst в интерфейсе Deque<E>
Параметры:
e - добавляемый элемент
Исключения:
NullPointerException - если указанный элемент равен null

addLast

public void addLast(E e)

Вставляет указанный элемент в конец этого дека. Поскольку дек неограничен, этот метод никогда не бросит IllegalStateException.

Этот метод эквивалентен add(E).

Определено в:
addLast в интерфейсе Deque<E>
Параметры:
e - добавляемый элемент
Исключения:
NullPointerException - если указанный элемент равен null

offerFirst

public boolean offerFirst(E e)

Вставляет указанный элемент в начало этого дека. Поскольку дек неограничен, этот метод никогда не вернёт false.

Определено в:
offerFirst в интерфейсе Deque<E>
Параметры:
e - добавляемый элемент
Возвращает:
true (как указано в Deque.offerFirst(E))
Исключения:
NullPointerException - если указанный элемент равен null

offerLast

public boolean offerLast(E e)

Вставляет указанный элемент в конец этого дека. Поскольку дек неограничен, этот метод никогда не вернёт false.

Этот метод эквивалентен add(E).

Определено в:
offerLast в интерфейсе Deque<E>
Параметры:
e - добавляемый элемент
Возвращает:
true (как указано в Deque.offerLast(E))
Исключения:
NullPointerException - если указанный элемент равен null

getFirst

public E getFirst()

Описание скопировано из интерфейса: Deque

Возвращает, но не удаляет, первый элемент этого дека. Этот метод отличается от peekFirst только тем, что он генерирует исключение, если этот дек пуст.

Определено в:
getFirst в интерфейсе Deque<E>
Возвращает:
голова этого дека
Исключения:
NoSuchElementException - если этот дек пуст

getLast

public E getLast()

Описание скопировано из интерфейса: Deque

Возвращает, но не удаляет, последний элемент этого дека. Этот метод отличается от peekLast только тем, что он генерирует исключение, если этот дек пуст.

Определено в:
getLast в интерфейсе Deque<E>
Возвращает:
хвост этого дека
Исключения:
NoSuchElementException - если этот дек пуст

removeFirst

public E removeFirst()

Описание скопировано из интерфейса: Deque

Возвращает и удаляет первый элемент этого дека. Этот метод отличается от pollFirst только тем, что он генерирует исключение, если этот дек пуст.

Определено в:
removeFirst в интерфейсе Deque<E>
Возвращает:
голова этого дека
Исключения:
NoSuchElementException - если этот дек пуст

removeLast

public E removeLast()

Описание скопировано из интерфейса: Deque

Возвращает и удаляет последний элемент этого дека. Этот метод отличается от pollLast только тем, что он генерирует исключение, если этот дек пуст.

Определено в:
removeLast в интерфейсе Deque<E>
Возвращает:
хвост этого дека
Исключения:
NoSuchElementException - если этот дек пуст

offer

public boolean offer(E e)

Вставляет указанный элемент в хвост этого дека. Поскольку дек неограничен, этот метод никогда не вернёт false.

Определено в:
offer в интерфейсе Deque<E>
Определено в:
offer в интерфейсе Queue<E>
Параметры:
e - добавляемый элемент
Возвращает:
true (как указано в Queue.offer(E))
Исключения:
NullPointerException - если указанный элемент равен null

add

public boolean add(E e)

Вставляет указанный элемент в хвост этого дека. Поскольку дек неограничен, этот метод никогда не бросит IllegalStateException или вернёт false.

Определено в:
add в интерфейсе Collection<E>
Определено в:
add в интерфейсе Deque<E>
Определено в:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractCollection<E>
Параметры:
e - элемент, присутствие которого в этом наборе необходимо гарантировать
Возвращает:
true (как указано в Collection.add(E))
Исключения:
NullPointerException - если указанный элемент равен null

remove

public E remove()

Описание скопировано из интерфейса: Deque

Возвращает и удаляет голову очереди, представленной этим деком (другими словами, первый элемент этого дека). Этот метод отличается от poll() только тем, что он генерирует исключение, если этот дек пуст.

Этот метод эквивалентен Deque.removeFirst().

Определено в:
remove в интерфейсе Deque<E>
Определено в:
remove в интерфейсе Queue<E>
Возвращает:
голова очереди, представленной этим деком
Исключения:
NoSuchElementException - если этот дек пуст

pop

public E pop()

Описание скопировано из интерфейса: Deque

Извлекает элемент из стека, представленного этим деком. Другими словами, удаляет и возвращает первый элемент этого дека.

Этот метод эквивалентен Deque.removeFirst().

Определено в:
pop в интерфейсе Deque<E>
Возвращает:
элемент в начале этого дека (который является вершиной стека, представленного этим деком)
Исключения:
NoSuchElementException - если этот дек пуст

element

public E element()

Описание скопировано из интерфейса: Deque

Возвращает, но не удаляет, голову очереди, представленной этим деком (другими словами, первый элемент этого дека). Этот метод отличается от peek только тем, что он генерирует исключение, если этот дек пуст.

Этот метод эквивалентен Deque.getFirst().

Определено в:
element в интерфейсе Deque<E>
Определено в:
element в интерфейсе Queue<E>
Возвращает:
голова очереди, представленной этим деком
Исключения:
NoSuchElementException - если этот дек пуст

push

public void push(E e)

Описание скопировано из интерфейса: Deque

Помещает элемент в стек, представленный этим деком (другими словами, в начало этого дека), если это возможно сделать немедленно без нарушения ограничений по емкости, выбрасывая IllegalStateException , если в настоящее время нет места.

Этот метод эквивалентен Deque.addFirst(E).

Определено в:
push в интерфейсе Deque<E>
Параметры:
e - элемент, который необходимо поместить
Исключения:
NullPointerException - если указанный элемент равен null, и этот дек не допускает null-элементов

removeFirstOccurrence

public boolean removeFirstOccurrence(Object o)

Удаляет первое вхождение указанного элемента из этого дека. Если дек не содержит элемент, он не изменяется. Более формально, удаляет первый элемент e такой, что o.equals(e) (если такой элемент существует). Возвращает true , если этот дек содержал указанный элемент (или, эквивалентно, если этот дек изменился в результате вызова).

Определено в:
removeFirstOccurrence в интерфейсе Deque<E>
Параметры:
o - элемент, который нужно удалить из этого дека, если он присутствует
Возвращает:
true , если дек содержал указанный элемент
Исключения:
NullPointerException - если указанный элемент равен null

removeLastOccurrence

public boolean removeLastOccurrence(Object o)

Удаляет последнее вхождение указанного элемента из этого дека. Если дек не содержит элемент, он не изменяется. Более формально, удаляет последний элемент e такой, что o.equals(e) (если такой элемент существует). Возвращает true , если этот дек содержал указанный элемент (или, эквивалентно, если этот дек изменился в результате вызова).

Определено в:
removeLastOccurrence в интерфейсе Deque<E>
Параметры:
o - элемент, который нужно удалить из этого дека, если он присутствует
Возвращает:
true , если дек содержал указанный элемент
Исключения:
NullPointerException - если указанный элемент равен null

contains

public boolean contains(Object o)

Возвращает true, если данная очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по крайней мере один элемент e, такой что o.equals(e).

Specified by:
contains в интерфейсе Collection<E>
Specified by:
contains в интерфейсе Deque<E>
Overrides:
contains в классе AbstractCollection<E>
Parameters:
o - элемент, присутствие которого в этой очереди необходимо проверить
Returns:
true, если эта очередь содержит указанный элемент

isEmpty

public boolean isEmpty()

Возвращает true, если эта коллекция не содержит элементов.

Specified by:
isEmpty в интерфейсе Collection<E>
Overrides:
isEmpty в классе AbstractCollection<E>
Returns:
true, если эта коллекция не содержит элементов

size

public int size()

Возвращает количество элементов в этой очереди. Если эта очередь содержит более Integer.MAX_VALUE элементов, возвращается Integer.MAX_VALUE.

Обратите внимание, что, в отличие от большинства коллекций, этот метод НЕ является операцией постоянного времени. Из-за асинхронной природы этих очередей, определение текущего количества элементов требует их полного обхода и подсчета. Кроме того, размер может измениться во время выполнения этого метода, в этом случае возвращаемый результат будет неточным. Таким образом, этот метод обычно не очень полезен в конкурирующих приложениях.

Specified by:
size в интерфейсе Collection<E>
Specified by:
size в интерфейсе Deque<E>
Returns:
количество элементов в этой очереди

remove

public boolean remove(Object o)

Удаляет первое вхождение указанного элемента из этой очереди. Если очередь не содержит элемента, она остается неизменной. Более формально, удаляет первый элемент e, такой что o.equals(e) (если такой элемент существует). Возвращает true, если эта очередь содержала указанный элемент (или, эквивалентно, если эта очередь изменилась в результате вызова).

Этот метод эквивалентен removeFirstOccurrence(Object).

Specified by:
remove в интерфейсе Collection<E>
Specified by:
remove в интерфейсе Deque<E>
Overrides:
remove в классе AbstractCollection<E>
Parameters:
o - элемент, который необходимо удалить из этой очереди, если он присутствует
Returns:
true, если очередь содержала указанный элемент
Throws:
NullPointerException - если указанный элемент равен null

addAll

public boolean addAll(Collection<? extends E> c)

Добавляет все элементы из указанной коллекции в конец этой очереди в порядке, в котором они возвращаются итератором указанной коллекции. Попытки addAll очереди к самой себе приводят к IllegalArgumentException.

Specified by:
addAll в интерфейсе Collection<E>
Specified by:
addAll в интерфейсе Deque<E>
Overrides:
addAll в классе AbstractCollection<E>
Parameters:
c - элементы, которые необходимо вставить в эту очередь
Returns:
true, если эта очередь изменилась в результате вызова
Throws:
NullPointerException - если указанная коллекция или любой из ее элементов равны null
IllegalArgumentException - если коллекция является этой очередью
See Also:
AbstractCollection.add(Object)

clear

public void clear()

Удаляет все элементы из этой очереди.

Specified by:
clear в интерфейсе Collection<E>
Overrides:
clear в классе AbstractCollection<E>

toArray

public Object[] toArray()

Возвращает массив, содержащий все элементы этой очереди в правильной последовательности (от первого к последнему элементу).

Возвращаемый массив будет «безопасным» в том смысле, что к нему не сохраняются ссылки из этой очереди. (Другими словами, этот метод должен выделить новый массив). Таким образом, вызывающая сторона свободна изменять возвращаемый массив.

Этот метод действует как мост между основанными на массивах и основанными на коллекциях API.

Specified by:
toArray в интерфейсе Collection<E>
Overrides:
toArray в классе AbstractCollection<E>
Returns:
массив, содержащий все элементы этой очереди

toArray

public <T> T[] toArray(T[] a)

Возвращает массив, содержащий все элементы этой очереди в правильной последовательности (от первого к последнему элементу); тип возвращаемого массива соответствует типу указанного массива. Если очередь помещается в указанный массив, она возвращается в нем. В противном случае выделяется новый массив с типом, соответствующим указанному массиву, и размером этой очереди.

Если эта очередь помещается в указанный массив с избытком места (т. е. массив имеет больше элементов, чем эта очередь), элемент в массиве непосредственно после конца очереди устанавливается в null.

Как и метод toArray(), этот метод действует как мост между основанными на массивах и основанными на коллекциях API. Кроме того, этот метод позволяет точно контролировать тип возвращаемого массива и может в определенных ситуациях использоваться для экономии затрат на выделение памяти.

Предположим, x - это очередь, известная тем, что содержит только строки. Следующий код может использоваться для выгрузки очереди в новый выделенный массив String:

String[] y = x.toArray(new String[0]);
Обратите внимание, что toArray(new Object[0]) идентичен по функции toArray().
Specified by:
toArray в интерфейсе Collection<E>
Overrides:
toArray в классе AbstractCollection<E>
Type Parameters:
T - тип компонентов массива, который должен содержать коллекцию
Parameters:
a - массив, в который должны быть помещены элементы очереди, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа
Returns:
массив, содержащий все элементы этой очереди
Throws:
ArrayStoreException - если тип времени выполнения указанного массива не является супертипом типа времени выполнения каждого элемента в этой очереди
NullPointerException - если указанный массив равен null

iterator

public Iterator<E> iterator()

Возвращает итератор по элементам этой очереди в правильной последовательности. Элементы будут возвращены в порядке от первого (начала) до последнего (конца).

Возвращаемый итератор является слабо согласованным.

Specified by:
iterator в интерфейсе Collection<E>
Specified by:
iterator в интерфейсе Deque<E>
Specified by:
iterator в интерфейсе Iterable<E>
Specified by:
iterator в классе AbstractCollection<E>
Returns:
итератор по элементам этой очереди в правильной последовательности

descendingIterator

public Iterator<E> descendingIterator()

Возвращает итератор по элементам этой очереди в обратном порядке. Элементы будут возвращены в порядке от последнего (конца) к первому (началу).

Возвращаемый итератор является слабо согласованным.

Specified by:
descendingIterator в интерфейсе Deque<E>
Returns:
итератор по элементам этой очереди в обратном порядке

spliterator

public Spliterator<E> spliterator()

Возвращает Spliterator по элементам этой очереди.

Возвращаемый спитератор является слабо согласованным.

Спитератор Spliterator сообщает о Spliterator.CONCURRENT, Spliterator.ORDERED и Spliterator.NONNULL.

Specified by:
spliterator в интерфейсе Collection<E>
Specified by:
spliterator в интерфейсе Iterable<E>
Implementation Note:
Spliterator реализует trySplit для обеспечения ограниченного параллелизма.
Returns:
Spliterator по элементам этой очереди
Since:
1.8

removeIf

public boolean removeIf(Predicate<? super E> filter)

Описание скопировано из интерфейса: Collection

Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату. Ошибки или исключения времени выполнения, сгенерированные во время итерации или предикатом, передаются вызывающей стороне.

Specified by:
removeIf в интерфейсе Collection<E>
Parameters:
filter - предикат, возвращающий true для элементов, которые необходимо удалить
Returns:
true, если были удалены какие-либо элементы
Throws:
NullPointerException - если указанный фильтр равен null

removeAll

public boolean removeAll(Collection<?> c)

Описание скопировано из класса: AbstractCollection

Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (дополнительная операция). После возврата вызова эта коллекция не будет содержать элементов, общих с указанной коллекцией.

Определено:
removeAll в интерфейсе Collection<E>
Переопределяет:
removeAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые нужно удалить из этой коллекции
Возвращает:
true если эта коллекция изменилась в результате вызова
Исключения:
NullPointerException — если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не поддерживает нулевые элементы (необязательно), или если указанная коллекция равна null
См. также:
AbstractCollection.remove(Object), AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)

Описание скопировано из класса: AbstractCollection

Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). Другими словами, удаляет из этой коллекции все ее элементы, которые не содержатся в указанной коллекции.

Определено:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые нужно сохранить в этой коллекции
Возвращает:
true если эта коллекция изменилась в результате вызова
Исключения:
NullPointerException — если эта коллекция содержит один или несколько нулевых элементов, а указанная коллекция не допускает нулевые элементы (необязательно), или если указанная коллекция равна null
См. также:
AbstractCollection.remove(Object), AbstractCollection.contains(Object)

forEach

public void forEach(Consumer<? super E> action)

Описание скопировано из интерфейса: Iterable

Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не вызовет исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключения, вызываемые действием, передаются вызывающей стороне.

Поведение этого метода не определено, если действие выполняет побочные эффекты, которые изменяют исходный источник элементов, если только переопределяющий класс не указал политику одновременного изменения.

Определено:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, которое должно выполняться для каждого элемента
Исключения:
NullPointerException — если указанное действие равно null

© 1993, 2020, 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/11/docs/api/java.base/java/util/concurrent/ConcurrentLinkedDeque.html

Spec-Zone .ru
спецификации, руководства, описания, API