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,可能会报告不准确的结果。 此外,该批量操作addAll
, removeAll
, retainAll
, containsAll
, equals
和toArray
待原子方式执行, 不能保证。 例如,与addAll
操作同时运行的迭代器可能仅查看一些添加的元素。
此类及其迭代器实现 Deque
和 Iterator
接口的所有 可选方法。
存储器一致性效果:当与其他并发集合,事先将物体放置成在一个线程动作 ConcurrentLinkedDeque
happen-before到该元素的从访问或移除后续动作 ConcurrentLinkedDeque
在另一个线程。
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) 如果此双端队列包含指定的元素,则返回 |
Iterator<E> |
descendingIterator() 以相反顺序返回此双端队列中元素的迭代器。 |
E |
element() 检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 |
E |
getFirst() 检索但不删除此双端队列的第一个元素。 |
E |
getLast() 检索但不删除此双端队列的最后一个元素。 |
boolean |
isEmpty() 如果此集合不包含元素,则返回 |
Iterator<E> |
iterator() 以适当的顺序返回此双端队列中元素的迭代器。 |
boolean |
offer(E e) 在此双端队列的尾部插入指定的元素。 |
boolean |
offerFirst(E e) 在此双端队列的前面插入指定的元素。 |
boolean |
offerLast(E e) 在此双端队列的末尾插入指定的元素。 |
E |
peek() 检索但不移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 |
E |
peekFirst() 检索但不移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 |
E |
peekLast() 检索但不移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 |
E |
poll() 检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 |
E |
pollFirst() 检索并移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 |
E |
pollLast() 检索并移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 |
E |
pop() 从由此双端队列表示的堆栈中弹出一个元素。 |
void |
push(E e) 如果可以在不违反容量限制的情况下立即执行此操作,则将元素推入由此双端队列表示的堆栈中(如果没有空间限制,则抛出 |
E |
remove() 检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 |
boolean |
remove(Object o) 从此双端队列中移除指定元素的第一个匹配项。 |
E |
removeFirst() 检索并删除此双端队列的第一个元素。 |
boolean |
removeFirstOccurrence(Object o) 从此双端队列中移除指定元素的第一个匹配项。 |
E |
removeLast() 检索并删除此双端队列的最后一个元素。 |
boolean |
removeLastOccurrence(Object o) 从此双端队列中移除指定元素的最后一次出现。 |
int |
size() 返回此双端队列中的元素数量。 |
Spliterator<E> |
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
|
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 |
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 |
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 |
void addFirst (E e)
在此双端队列的前面插入指定的元素。 由于该deque是无界的,这个方法永远不会抛出IllegalStateException
。
Parameters | |
---|---|
e |
E : the element to add |
Throws | |
---|---|
NullPointerException |
if the specified element is null |
void addLast (E e)
在此双端队列的末尾插入指定的元素。 由于该deque是无界的,这个方法永远不会抛出IllegalStateException
。
这种方法相当于 add(E)
。
Parameters | |
---|---|
e |
E : the element to add |
Throws | |
---|---|
NullPointerException |
if the specified element is null |
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 |
Iterator<E> descendingIterator ()
以相反顺序返回此双端队列中元素的迭代器。 元素将从上一个(尾)到第一个(头)的顺序返回。
返回的迭代器是 weakly consistent 。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this deque in reverse order |
E element ()
检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与peek
仅在于,如果此双端队列为空,则会引发异常。
该方法相当于 getFirst()
。
Returns | |
---|---|
E |
the head of the queue represented by this deque |
Throws | |
---|---|
NoSuchElementException |
E getFirst ()
检索但不删除此双端队列的第一个元素。 此方法与peekFirst
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the head of this deque |
Throws | |
---|---|
NoSuchElementException |
E getLast ()
检索但不删除此双端队列的最后一个元素。 此方法与peekLast
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the tail of this deque |
Throws | |
---|---|
NoSuchElementException |
boolean isEmpty ()
如果此集合不包含元素,则返回 true
。
Returns | |
---|---|
boolean |
true if this collection contains no elements |
Iterator<E> iterator ()
以适当的顺序返回此双端队列中元素的迭代器。 元素将从第一个(头部)到最后一个(尾部)按顺序返回。
返回的迭代器是 weakly consistent 。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this deque in proper sequence |
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 |
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 |
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 |
E peek ()
检索但不移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 null
。
该方法相当于 peekFirst()
。
Returns | |
---|---|
E |
the head of the queue represented by this deque, or null if this deque is empty |
E peekFirst ()
检索但不移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null
。
Returns | |
---|---|
E |
the head of this deque, or null if this deque is empty |
E peekLast ()
检索但不移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null
。
Returns | |
---|---|
E |
the tail of this deque, or null if this deque is empty |
E poll ()
检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null
。
该方法相当于 pollFirst()
。
Returns | |
---|---|
E |
the first element of this deque, or null if this deque is empty |
E pollFirst ()
检索并移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 null
。
Returns | |
---|---|
E |
the head of this deque, or null if this deque is empty |
E pollLast ()
检索并移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 null
。
Returns | |
---|---|
E |
the tail of this deque, or null if this deque is empty |
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 |
void push (E e)
如果可以立即执行而不违反容量限制, IllegalStateException
元素推入由此双端队列表示的堆栈(即,在此双端队列的头部),如果当前没有可用空间,则抛出 IllegalStateException
。
该方法相当于 addFirst(E)
。
Parameters | |
---|---|
e |
E : the element to push |
Throws | |
---|---|
NullPointerException |
E remove ()
检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与poll
仅在于,如果此双端队列为空,则会引发异常。
该方法相当于 removeFirst()
。
Returns | |
---|---|
E |
the head of the queue represented by this deque |
Throws | |
---|---|
NoSuchElementException |
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 |
E removeFirst ()
检索并删除此双端队列的第一个元素。 该方法与pollFirst
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the head of this deque |
Throws | |
---|---|
NoSuchElementException |
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 |
E removeLast ()
检索并删除此双端队列的最后一个元素。 该方法与pollLast
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the tail of this deque |
Throws | |
---|---|
NoSuchElementException |
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 |
int size ()
返回此双端队列中的元素数量。 如果此双端队列包含多个Integer.MAX_VALUE
元素,则它将返回Integer.MAX_VALUE
。
请注意,与大多数集合不同,此方法不是一个常量操作。 由于这些deques的异步性质,确定当前元素的数量需要遍历它们来对它们进行计数。 此外,在执行此方法期间可能会更改大小,在这种情况下返回的结果将不准确。 因此,这种方法在并发应用程序中通常不是很有用。
Returns | |
---|---|
int |
the number of elements in this deque |
Spliterator<E> spliterator ()
通过此双端队列中的元素返回 Spliterator
。
返回的分割符是 weakly consistent 。
该 Spliterator
报告 CONCURRENT
, ORDERED
,并 NONNULL
。
Spliterator
implements trySplit
to permit limited parallelism.Returns | |
---|---|
Spliterator<E> |
a Spliterator over the elements in this deque |
Object[] toArray ()
以适当的顺序(从第一个元素到最后一个元素)返回包含此双端队列中所有元素的数组。
返回的数组将是“安全的”,因为此双端队列没有引用它。 (换句话说,这个方法必须分配一个新的数组)。 调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
Returns | |
---|---|
Object[] |
an array containing all of the elements in this deque |
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 |
String toString ()
返回此集合的字符串表示形式。 字符串表示由收集元素的列表组成,它们按迭代器返回的顺序包含在方括号中( "[]" )。 相邻元素由字符", " (逗号和空格)分隔。 元素被转换为字符串,如valueOf(Object)
。
Returns | |
---|---|
String |
a string representation of this collection |