public interface Deque
implements Queue<E>
java.util.Deque<E> |
Known Indirect Subclasses
|
线性集合,支持两端的元素插入和移除。 名称deque是“双端队列”的缩写,通常发音为“deck”。 大多数Deque
实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deque。
这个接口定义访问deque两端元素的方法。 提供了插入,删除和检查元素的方法。 每种方法都以两种形式存在:一种操作失败时抛出异常,另一种返回特殊值(根据操作而false
,为null
或false
)。 插入操作的后一种形式专门用于容量限制的Deque
实现; 在大多数实现中,插入操作不会失败。
下表总结了上述12种方法:
First Element (Head) | Last Element (Tail) | |||
Throws exception | Special value | Throws exception | Special value | |
Insert | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
Remove | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
Examine | getFirst() |
peekFirst() |
getLast() |
peekLast() |
该接口扩展了Queue
接口。 当使用deque作为队列时,会产生FIFO(先进先出)行为。 元素添加在双端队列的末尾并从头开始删除。 从Queue
接口继承的方法与Deque
方法完全等效,如下表所示:
Queue Method |
Equivalent Deque Method |
add(e) |
addLast(e) |
offer(e) |
offerLast(e) |
remove() |
removeFirst() |
poll() |
pollFirst() |
element() |
getFirst() |
peek() |
peekFirst() |
Deques也可以用作LIFO(后进先出)堆栈。 此接口应优先于传统的Stack
类使用。 当一个deque用作堆栈时,元素会从deque的开始处被推入并弹出。 堆栈方法与Deque
方法完全等效, Deque
表所示:
Stack Method | Equivalent Deque Method |
push(e) |
addFirst(e) |
pop() |
removeFirst() |
peek() |
peekFirst() |
请注意,当将deque用作队列或堆栈时, peek
方法同样适用。 在任何一种情况下,元素都是从deque开始绘制的。
该界面提供了两种方法来删除内部元素, removeFirstOccurrence
和 removeLastOccurrence
。
与 List
接口不同,此接口不支持索引访问元素。
虽然Deque
实现并不严格要求禁止插入空元素,但强烈建议他们这样做。 任何用户Deque
强烈建议实现,也允许null元素不采取插入空的能力优势。 这是因为null
被各种方法用作特殊返回值来指示该双端队列是空的。
Deque
实现通常不定义 equals
和 hashCode
方法的基于元素的版本,而是继承 Object
类的基于身份的版本。
Public methods |
|
---|---|
abstract boolean |
add(E e) 将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 |
abstract void |
addFirst(E e) 如果可以立即执行而不违反容量限制,则将指定元素插入此双端队列的前端,如果当前没有可用空间,则抛出 |
abstract void |
addLast(E e) 如果可以立即执行而不违反容量限制,则在此双端队列的末尾插入指定的元素,如果当前没有可用空间,则抛出 |
abstract boolean |
contains(Object o) 如果此双端队列包含指定的元素,则返回 |
abstract Iterator<E> |
descendingIterator() 以相反顺序返回此双端队列中元素的迭代器。 |
abstract E |
element() 检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 |
abstract E |
getFirst() 检索但不删除此双端队列的第一个元素。 |
abstract E |
getLast() 检索但不删除此双端队列的最后一个元素。 |
abstract Iterator<E> |
iterator() 以适当的顺序返回此双端队列中元素的迭代器。 |
abstract boolean |
offer(E e) 将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 |
abstract boolean |
offerFirst(E e) 将指定的元素插入此双端队列的前端,除非它违反了容量限制。 |
abstract boolean |
offerLast(E e) 在该双端队列的末尾插入指定的元素,除非它违反了容量限制。 |
abstract E |
peek() 检索但不移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 |
abstract E |
peekFirst() 检索但不移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 |
abstract E |
peekLast() 检索但不删除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 |
abstract E |
poll() 检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素),或者如果此双端队列为空,则返回 |
abstract E |
pollFirst() 检索并移除此双端队列的第一个元素,或者如果此双端队列为空,则返回 |
abstract E |
pollLast() 检索并移除此双端队列的最后一个元素,或者如果此双端队列为空,则返回 |
abstract E |
pop() 从由此双端队列表示的堆栈中弹出一个元素。 |
abstract void |
push(E e) 如果可以立即执行而不违反容量限制, |
abstract E |
remove() 检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 |
abstract boolean |
remove(Object o) 从此双端队列中移除指定元素的第一个匹配项。 |
abstract E |
removeFirst() 检索并删除此双端队列的第一个元素。 |
abstract boolean |
removeFirstOccurrence(Object o) 从此双端队列中移除指定元素的第一个匹配项。 |
abstract E |
removeLast() 检索并删除此双端队列的最后一个元素。 |
abstract boolean |
removeLastOccurrence(Object o) 从此双端队列中移除指定元素的最后一次出现。 |
abstract int |
size() 返回此双端队列中的元素数量。 |
Inherited methods |
|
---|---|
From interface java.util.Queue
|
|
From interface java.util.Collection
|
|
From interface java.lang.Iterable
|
boolean add (E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true
成功时和抛出IllegalStateException
,如果当前没有空间可用的。 使用容量限制的双端队列时,通常最好使用offer
。
该方法相当于 addLast(E)
。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true (as specified by add(E) ) |
Throws | |
---|---|
IllegalStateException |
if the element cannot be added at this time due to capacity restrictions |
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
void addFirst (E e)
如果可以立即执行而不违反容量限制,则将指定元素插入此双端队列的前端,如果当前没有可用空间,则抛出IllegalStateException
。 使用容量限制的双端队列时,通常最好使用方法offerFirst(E)
。
Parameters | |
---|---|
e |
E : the element to add |
Throws | |
---|---|
IllegalStateException |
if the element cannot be added at this time due to capacity restrictions |
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
void addLast (E e)
如果可以立即执行而不违反容量限制,则在此双端队列的末尾插入指定的元素,如果当前没有可用空间,则抛出IllegalStateException
。 当使用容量限制的双端队列时,通常最好使用方法offerLast(E)
。
该方法相当于 add(E)
。
Parameters | |
---|---|
e |
E : the element to add |
Throws | |
---|---|
IllegalStateException |
if the element cannot be added at this time due to capacity restrictions |
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
boolean contains (Object o)
如果此双端队列包含指定的元素,则返回true
。 更正式地说,返回true
当且仅当此双端包含至少一个元素e
例如Objects.equals(o, e)
。
Parameters | |
---|---|
o |
Object : element whose presence in this deque is to be tested |
Returns | |
---|---|
boolean |
true if this deque contains the specified element |
Throws | |
---|---|
ClassCastException |
if the class of the specified element is incompatible with this deque (optional) |
NullPointerException |
if the specified element is null and this deque does not permit null elements (optional) |
Iterator<E> descendingIterator ()
以相反顺序返回此双端队列中元素的迭代器。 元素将从上一个(尾)到第一个(头)的顺序返回。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this deque in reverse sequence |
E element ()
检索但不删除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与peek
不同之处仅在于,如果此双端队列为空,则会引发异常。
该方法相当于 getFirst()
。
Returns | |
---|---|
E |
the head of the queue represented by this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
E getFirst ()
检索但不删除此双端队列的第一个元素。 该方法与peekFirst
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the head of this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
E getLast ()
检索但不删除此双端队列的最后一个元素。 此方法与peekLast
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the tail of this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
Iterator<E> iterator ()
以适当的顺序返回此双端队列中元素的迭代器。 元素将从第一个(头部)到最后一个(尾部)按顺序返回。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this deque in proper sequence |
boolean offer (E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true
在成功和false
,如果当前没有空间可用。 当使用容量限制的双端队列时,此方法通常优于add(E)
方法,该方法可能无法仅通过抛出异常来插入元素。
该方法相当于 offerLast(E)
。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true if the element was added to this deque, else false |
Throws | |
---|---|
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
boolean offerFirst (E e)
将指定的元素插入此双端队列的前端,除非它违反了容量限制。 当使用容量限制的双端队列时,此方法通常比addFirst(E)
方法更可取,该方法只能通过抛出异常才能插入元素。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true if the element was added to this deque, else false |
Throws | |
---|---|
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
boolean offerLast (E e)
在该双端队列的末尾插入指定的元素,除非它违反了容量限制。 当使用容量限制的双端队列时,该方法通常优于addLast(E)
方法,该方法只能通过抛出异常才能插入元素。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true if the element was added to this deque, else false |
Throws | |
---|---|
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
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 |
if this deque is empty |
void push (E e)
如果可以立即执行而不违反容量限制, IllegalStateException
元素推入由此双端队列表示的堆栈中(如果没有违反容量限制,则抛出 IllegalStateException
如果当前没有空间可用则抛出 IllegalStateException
。
这种方法相当于 addFirst(E)
。
Parameters | |
---|---|
e |
E : the element to push |
Throws | |
---|---|
IllegalStateException |
if the element cannot be added at this time due to capacity restrictions |
ClassCastException |
if the class of the specified element prevents it from being added to this deque |
NullPointerException |
if the specified element is null and this deque does not permit null elements |
IllegalArgumentException |
if some property of the specified element prevents it from being added to this deque |
E remove ()
检索并移除由此双端队列表示的队列头(换句话说,此双端队列的第一个元素)。 此方法与poll
仅在于,如果此双端队列为空,则会引发异常。
该方法相当于 removeFirst()
。
Returns | |
---|---|
E |
the head of the queue represented by this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
boolean remove (Object o)
从此双端队列中移除指定元素的第一个匹配项。 如果该deque不包含该元素,则该值不变。 更正式地说,删除第一个元素e
,使得Objects.equals(o, e)
(如果存在这样的元素)。 如果此双端队列包含指定的元素(或者等价地,如果此双端队列由于调用而更改),则返回true
。
该方法相当于 removeFirstOccurrence(Object)
。
Parameters | |
---|---|
o |
Object : element to be removed from this deque, if present |
Returns | |
---|---|
boolean |
true if an element was removed as a result of this call |
Throws | |
---|---|
ClassCastException |
if the class of the specified element is incompatible with this deque (optional) |
NullPointerException |
if the specified element is null and this deque does not permit null elements (optional) |
E removeFirst ()
检索并删除此双端队列的第一个元素。 此方法与pollFirst
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the head of this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
boolean removeFirstOccurrence (Object o)
从此双端队列中移除指定元素的第一个匹配项。 如果该deque不包含该元素,则该值不变。 更正式地说,删除第一个元素e
,使得Objects.equals(o, e)
(如果存在这样的元素)。 如果此双端队列包含指定的元素(或等效地,如果此双端队列由于调用而更改),则返回true
。
Parameters | |
---|---|
o |
Object : element to be removed from this deque, if present |
Returns | |
---|---|
boolean |
true if an element was removed as a result of this call |
Throws | |
---|---|
ClassCastException |
if the class of the specified element is incompatible with this deque (optional) |
NullPointerException |
if the specified element is null and this deque does not permit null elements (optional) |
E removeLast ()
检索并删除此双端队列的最后一个元素。 此方法与pollLast
仅在于,如果此双端队列为空,则会引发异常。
Returns | |
---|---|
E |
the tail of this deque |
Throws | |
---|---|
NoSuchElementException |
if this deque is empty |
boolean removeLastOccurrence (Object o)
从此双端队列中移除指定元素的最后一次出现。 如果该deque不包含该元素,则该值不变。 更正式地说,删除最后一个元素e
,使得Objects.equals(o, e)
(如果存在这样的元素)。 如果此双端队列包含指定的元素(或者等价地,如果此双端队列由于调用而更改),则返回true
。
Parameters | |
---|---|
o |
Object : element to be removed from this deque, if present |
Returns | |
---|---|
boolean |
true if an element was removed as a result of this call |
Throws | |
---|---|
ClassCastException |
if the class of the specified element is incompatible with this deque (optional) |
NullPointerException |
if the specified element is null and this deque does not permit null elements (optional) |
int size ()
返回此双端队列中的元素数量。
Returns | |
---|---|
int |
the number of elements in this deque |