Most visited

Recently visited

Added in API level 21

ConcurrentLinkedDeque

public class ConcurrentLinkedDeque
extends AbstractCollection<E> implements Deque<E>, Serializable

java.lang.Object
   ↳ java.util.AbstractCollection<E>
     ↳ java.util.concurrent.ConcurrentLinkedDeque<E>


基于链接节点的无限制并发deque 并发插入,删除和访问操作可以安全地跨多个线程执行。 当许多线程共享对一个通用集合的访问时, ConcurrentLinkedDeque是一个合适的选择。 像大多数其他并发收集实现一样,此类不允许使用null元素。

迭代器和分割器是 weakly consistent

请注意,与大多数收藏不同, size方法不是一个常量操作。 由于这些deques的异步特性,确定当前元素数量需要遍历元素,因此如果在遍历期间修改此collection,可能会报告不准确的结果。 此外,该批量操作addAllremoveAllretainAllcontainsAllequalstoArray待原子方式执行, 不能保证。 例如,与addAll操作同时运行的迭代器可能仅查看一些添加的元素。

此类及其迭代器实现 DequeIterator接口的所有 可选方法。

存储器一致性效果:当与其他并发集合,事先将物体放置成在一个线程动作 ConcurrentLinkedDeque happen-before到该元素的从访问或移除后续动作 ConcurrentLinkedDeque在另一个线程。

Summary

Public constructors

ConcurrentLinkedDeque()

构建一个空的双端队列。

ConcurrentLinkedDeque(Collection<? extends E> c)

构造一个初始包含给定collection的元素的deque,并按集合迭代器的遍历顺序添加。

Public methods

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()

检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。

E getFirst()

检索但不删除此双端队列的第一个元素。

E getLast()

检索但不删除此双端队列的最后一个元素。

boolean isEmpty()

如果此集合不包含元素,则返回 true

Iterator<E> iterator()

以适当的顺序返回此双端队列中元素的迭代器。

boolean offer(E e)

在此双端队列的尾部插入指定的元素。

boolean offerFirst(E e)

在此双端队列的前面插入指定的元素。

boolean offerLast(E e)

在此双端队列的末尾插入指定的元素。

E peek()

检索但不移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 null

E peekFirst()

检索但不移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null

E peekLast()

检索但不移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null

E poll()

检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null

E pollFirst()

检索并移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null

E pollLast()

检索并移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null

E pop()

从由此双端队列表示的堆栈中弹出一个元素。

void push(E e)

如果可以在不违反容量限制的情况下立即执行此操作,则将元素推入由此双端队列表示的堆栈中(如果没有空间限制,则抛出 IllegalStateException

E remove()

检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。

boolean remove(Object o)

从此双端队列中移除指定元素的第一个匹配项。

E removeFirst()

检索并删除此双端队列的第一个元素。

boolean removeFirstOccurrence(Object o)

从此双端队列中移除指定元素的第一个匹配项。

E removeLast()

检索并删除此双端队列的最后一个元素。

boolean removeLastOccurrence(Object o)

从此双端队列中移除指定元素的最后一次出现。

int size()

返回此双端队列中的元素数量。

Spliterator<E> spliterator()

通过此双端队列中的元素返回 Spliterator

Object[] toArray()

以适当的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。

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

以适当的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。

String toString()

返回此集合的字符串表示形式。

Inherited methods

From class java.util.AbstractCollection
From class java.lang.Object
From interface java.util.Collection
From interface java.util.Deque
From interface java.lang.Iterable
From interface java.util.Queue

Public constructors

ConcurrentLinkedDeque

Added in API level 21
ConcurrentLinkedDeque ()

构建一个空的双端队列。

ConcurrentLinkedDeque

Added in API level 21
ConcurrentLinkedDeque (Collection<? extends E> c)

构造一个初始包含给定collection的元素的deque,并按集合迭代器的遍历顺序添加。

Parameters
c Collection: the collection of elements to initially contain
Throws
NullPointerException if the specified collection or any of its elements are null

Public methods

add

Added in API level 21
boolean add (E e)

在此双端队列的尾部插入指定的元素。 由于该deque是无界的,因此该方法不会抛出IllegalStateException或返回false

Parameters
e E: element whose presence in this collection is to be ensured
Returns
boolean true (as specified by add(E))
Throws
NullPointerException if the specified element is null

addAll

Added in API level 21
boolean addAll (Collection<? extends E> c)

按照指定集合的迭代器返回的顺序,将指定集合中的所有元素追加到此双端队列的末尾。 尝试addAll的deque本身导致IllegalArgumentException

Parameters
c Collection: the elements to be inserted into this deque
Returns
boolean true if this deque changed as a result of the call
Throws
NullPointerException if the specified collection or any of its elements are null
IllegalArgumentException if the collection is this deque

addFirst

Added in API level 21
void addFirst (E e)

在此双端队列的前面插入指定的元素。 由于该deque是无界的,这个方法永远不会抛出IllegalStateException

Parameters
e E: the element to add
Throws
NullPointerException if the specified element is null

addLast

Added in API level 21
void addLast (E e)

在此双端队列的末尾插入指定的元素。 由于该deque是无界的,这个方法永远不会抛出IllegalStateException

这种方法相当于 add(E)

Parameters
e E: the element to add
Throws
NullPointerException if the specified element is null

clear

Added in API level 21
void clear ()

删除此双端队列中的所有元素。

contains

Added in API level 21
boolean contains (Object o)

如果此双端队列包含指定的元素,则返回true 更正式地说,返回true当且仅当这个双端包含至少一个元素e例如o.equals(e)

Parameters
o Object: element whose presence in this deque is to be tested
Returns
boolean true if this deque contains the specified element

descendingIterator

Added in API level 21
Iterator<E> descendingIterator ()

以相反顺序返回此双端队列中元素的迭代器。 元素将从上一个(尾)到第一个(头)的顺序返回。

返回的迭代器是 weakly consistent

Returns
Iterator<E> an iterator over the elements in this deque in reverse order

element

Added in API level 21
E element ()

检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与peek仅在于,如果此双端队列为空,则会引发异常。

该方法相当于 getFirst()

Returns
E the head of the queue represented by this deque
Throws
NoSuchElementException

getFirst

Added in API level 21
E getFirst ()

检索但不删除此双端队列的第一个元素。 此方法与peekFirst仅在于,如果此双端队列为空,则会引发异常。

Returns
E the head of this deque
Throws
NoSuchElementException

getLast

Added in API level 21
E getLast ()

检索但不删除此双端队列的最后一个元素。 此方法与peekLast仅在于,如果此双端队列为空,则会引发异常。

Returns
E the tail of this deque
Throws
NoSuchElementException

isEmpty

Added in API level 21
boolean isEmpty ()

如果此集合不包含元素,则返回 true

Returns
boolean true if this collection contains no elements

iterator

Added in API level 21
Iterator<E> iterator ()

以适当的顺序返回此双端队列中元素的迭代器。 元素将从第一个(头部)到最后一个(尾部)按顺序返回。

返回的迭代器是 weakly consistent

Returns
Iterator<E> an iterator over the elements in this deque in proper sequence

offer

Added in API level 21
boolean offer (E e)

在此双端队列的尾部插入指定的元素。 由于该deque是无界的,这个方法永远不会返回false

Parameters
e E: the element to add
Returns
boolean true (as specified by offer(E))
Throws
NullPointerException if the specified element is null

offerFirst

Added in API level 21
boolean offerFirst (E e)

在此双端队列的前面插入指定的元素。 由于该deque是无界的,这个方法永远不会返回false

Parameters
e E: the element to add
Returns
boolean true (as specified by offerFirst(E))
Throws
NullPointerException if the specified element is null

offerLast

Added in API level 21
boolean offerLast (E e)

在此双端队列的末尾插入指定的元素。 由于该deque是无限的,这个方法永远不会返回false

这种方法相当于 add(E)

Parameters
e E: the element to add
Returns
boolean true (as specified by offerLast(E))
Throws
NullPointerException if the specified element is null

peek

Added in API level 21
E peek ()

检索但不移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 null

该方法相当于 peekFirst()

Returns
E the head of the queue represented by this deque, or null if this deque is empty

peekFirst

Added in API level 21
E peekFirst ()

检索但不移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null

Returns
E the head of this deque, or null if this deque is empty

peekLast

Added in API level 21
E peekLast ()

检索但不移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null

Returns
E the tail of this deque, or null if this deque is empty

poll

Added in API level 21
E poll ()

检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null

该方法相当于 pollFirst()

Returns
E the first element of this deque, or null if this deque is empty

pollFirst

Added in API level 21
E pollFirst ()

检索并移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null

Returns
E the head of this deque, or null if this deque is empty

pollLast

Added in API level 21
E pollLast ()

检索并移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null

Returns
E the tail of this deque, or null if this deque is empty

pop

Added in API level 21
E pop ()

从由此双端队列表示的堆栈中弹出一个元素。 换句话说,删除并返回此双端队列的第一个元素。

该方法相当于 removeFirst()

Returns
E the element at the front of this deque (which is the top of the stack represented by this deque)
Throws
NoSuchElementException

push

Added in API level 21
void push (E e)

如果可以立即执行而不违反容量限制, IllegalStateException元素推入由此双端队列表示的堆栈(即,在此双端队列的头部),如果当前没有可用空间,则抛出 IllegalStateException

该方法相当于 addFirst(E)

Parameters
e E: the element to push
Throws
NullPointerException

remove

Added in API level 21
E remove ()

检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与poll仅在于,如果此双端队列为空,则会引发异常。

该方法相当于 removeFirst()

Returns
E the head of the queue represented by this deque
Throws
NoSuchElementException

remove

Added in API level 21
boolean remove (Object o)

从此双端队列中移除指定元素的第一个匹配项。 如果该deque不包含该元素,则该值不变。 更正式地说,删除第一个元素e ,使得o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定的元素(或者等价地,如果此双端队列由于调用而更改),则返回true

该方法相当于 removeFirstOccurrence(Object)

Parameters
o Object: element to be removed from this deque, if present
Returns
boolean true if the deque contained the specified element
Throws
NullPointerException if the specified element is null

removeFirst

Added in API level 21
E removeFirst ()

检索并删除此双端队列的第一个元素。 该方法与pollFirst仅在于,如果此双端队列为空,则会引发异常。

Returns
E the head of this deque
Throws
NoSuchElementException

removeFirstOccurrence

Added in API level 21
boolean removeFirstOccurrence (Object o)

从此双端队列中移除指定元素的第一个匹配项。 如果该deque不包含该元素,则该值不变。 更正式地说,删除第一个元素e ,使得o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定的元素(或者等价地,如果此双端队列由于调用而更改),则返回true

Parameters
o Object: element to be removed from this deque, if present
Returns
boolean true if the deque contained the specified element
Throws
NullPointerException if the specified element is null

removeLast

Added in API level 21
E removeLast ()

检索并删除此双端队列的最后一个元素。 该方法与pollLast仅在于,如果此双端队列为空,则会引发异常。

Returns
E the tail of this deque
Throws
NoSuchElementException

removeLastOccurrence

Added in API level 21
boolean removeLastOccurrence (Object o)

从此双端队列中移除指定元素的最后一次出现。 如果该deque不包含该元素,则该值不变。 更正式地说,删除最后一个元素e ,使得o.equals(e) (如果存在这样的元素)。 如果此双端队列包含指定的元素(或等效地,如果此双端队列由于调用而更改),则返回true

Parameters
o Object: element to be removed from this deque, if present
Returns
boolean true if the deque contained the specified element
Throws
NullPointerException if the specified element is null

size

Added in API level 21
int size ()

返回此双端队列中的元素数量。 如果此双端队列包含多个Integer.MAX_VALUE元素,则它将返回Integer.MAX_VALUE

请注意,与大多数集合不同,此方法不是一个常量操作。 由于这些deques的异步性质,确定当前元素的数量需要遍历它们来对它们进行计数。 此外,在执行此方法期间可能会更改大小,在这种情况下返回的结果将不准确。 因此,这种方法在并发应用程序中通常不是很有用。

Returns
int the number of elements in this deque

spliterator

Added in API level 24
Spliterator<E> spliterator ()

通过此双端队列中的元素返回 Spliterator

返回的分割符是 weakly consistent

Spliterator报告 CONCURRENTORDERED ,并 NONNULL

Implementation Note:
  • The Spliterator implements trySplit to permit limited parallelism.
Returns
Spliterator<E> a Spliterator over the elements in this deque

toArray

Added in API level 21
Object[] toArray ()

以适当的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。

返回的数组将是“安全的”,因为此双端队列没有引用它。 (换句话说,这个方法必须分配一个新的数组)。 调用者可以自由修改返回的数组。

此方法充当基于数组和基于集合的API之间的桥梁。

Returns
Object[] an array containing all of the elements in this deque

toArray

Added in API level 21
T[] toArray (T[] a)

以适当的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 如果deque适合指定的数组,则返回其中。 否则,将使用指定数组的运行时类型和此双端队列的大小分配一个新数组。

如果此双端队列适合指定阵列,并有空余空间(即数组的元素多于此双端队列),那么阵列中紧跟在双端队列后面的元素将设置为 null

toArray()方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确控制输出数组的运行时类型,并且在某些情况下可以用于节省分配成本。

假设x是一个已知只包含字符串的deque。 以下代码可用于将该双端队列转储到新分配的数组String

 String[] y = x.toArray(new String[0]);
Note that toArray(new Object[0]) is identical in function to toArray().

Parameters
a T: the array into which the elements of the deque are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose
Returns
T[] an array containing all of the elements in this deque
Throws
ArrayStoreException if the runtime type of the specified array is not a supertype of the runtime type of every element in this deque
NullPointerException if the specified array is null

toString

Added in API level 21
String toString ()

返回此集合的字符串表示形式。 字符串表示由收集元素的列表组成,它们按迭代器返回的顺序包含在方括号中( "[]" )。 相邻元素由字符", " (逗号和空格)分隔。 元素被转换为字符串,如valueOf(Object)

Returns
String a string representation of this collection

Hooray!