Most visited

Recently visited

Added in API level 9

Deque

public interface Deque
implements Queue<E>

java.util.Deque<E>
Known Indirect Subclasses


线性集合,支持两端的元素插入和移除。 名称deque是“双端队列”的缩写,通常发音为“deck”。 大多数Deque实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deque。

这个接口定义访问deque两端元素的方法。 提供了插入,删除和检查元素的方法。 每种方法都以两种形式存在:一种操作失败时抛出异常,另一种返回特殊值(根据操作而false ,为nullfalse )。 插入操作的后一种形式专门用于容量限制的Deque实现; 在大多数实现中,插入操作不会失败。

下表总结了上述12种方法:

Summary of Deque methods
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方法完全等效,如下表所示:

Comparison of Queue and Deque methods
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表所示:

Comparison of Stack and Deque methods
Stack Method Equivalent Deque Method
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()

请注意,当将deque用作队列或堆栈时, peek方法同样适用。 在任何一种情况下,元素都是从deque开始绘制的。

该界面提供了两种方法来删除内部元素, removeFirstOccurrenceremoveLastOccurrence

List接口不同,此接口不支持索引访问元素。

虽然Deque实现并不严格要求禁止插入空元素,但强烈建议他们这样做。 任何用户Deque强烈建议实现,也允许null元素采取插入空的能力优势。 这是因为null被各种方法用作特殊返回值来指示该双端队列是空的。

Deque实现通常不定义 equalshashCode方法的基于元素的版本,而是继承 Object类的基于身份的版本。

Summary

Public methods

abstract boolean add(E e)

将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true成功时和抛出 IllegalStateException ,如果当前没有空间可用的。

abstract void addFirst(E e)

如果可以立即执行而不违反容量限制,则将指定元素插入此双端队列的前端,如果当前没有可用空间,则抛出 IllegalStateException

abstract void addLast(E e)

如果可以立即执行而不违反容量限制,则在此双端队列的末尾插入指定的元素,如果当前没有可用空间,则抛出 IllegalStateException

abstract boolean contains(Object o)

如果此双端队列包含指定的元素,则返回 true

abstract Iterator<E> descendingIterator()

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

abstract E element()

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

abstract E getFirst()

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

abstract E getLast()

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

abstract Iterator<E> iterator()

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

abstract boolean offer(E e)

将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true在成功和 false ,如果当前没有空间可用。

abstract boolean offerFirst(E e)

将指定的元素插入此双端队列的前端,除非它违反了容量限制。

abstract boolean offerLast(E e)

在该双端队列的末尾插入指定的元素,除非它违反了容量限制。

abstract E peek()

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

abstract E peekFirst()

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

abstract E peekLast()

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

abstract E poll()

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

abstract E pollFirst()

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

abstract E pollLast()

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

abstract E pop()

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

abstract void push(E e)

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

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

Public methods

add

Added in API level 11
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

addFirst

Added in API level 9
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

addLast

Added in API level 9
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

contains

Added in API level 11
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)

descendingIterator

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

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

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

element

Added in API level 11
E element ()

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

该方法相当于 getFirst()

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

getFirst

Added in API level 9
E getFirst ()

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

Returns
E the head of this deque
Throws
NoSuchElementException if this deque is empty

getLast

Added in API level 9
E getLast ()

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

Returns
E the tail of this deque
Throws
NoSuchElementException if this deque is empty

iterator

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

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

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

offer

Added in API level 11
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

offerFirst

Added in API level 9
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

offerLast

Added in API level 9
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

peek

Added in API level 11
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 9
E peekFirst ()

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

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

peekLast

Added in API level 9
E peekLast ()

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

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

poll

Added in API level 11
E poll ()

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

该方法相当于 pollFirst()

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

pollFirst

Added in API level 9
E pollFirst ()

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

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

pollLast

Added in API level 9
E pollLast ()

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

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

pop

Added in API level 9
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

push

Added in API level 9
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

remove

Added in API level 11
E remove ()

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

该方法相当于 removeFirst()

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

remove

Added in API level 11
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)

removeFirst

Added in API level 9
E removeFirst ()

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

Returns
E the head of this deque
Throws
NoSuchElementException if this deque is empty

removeFirstOccurrence

Added in API level 9
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)

removeLast

Added in API level 9
E removeLast ()

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

Returns
E the tail of this deque
Throws
NoSuchElementException if this deque is empty

removeLastOccurrence

Added in API level 9
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)

size

Added in API level 11
int size ()

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

Returns
int the number of elements in this deque

Hooray!