-
- 参数类型
-
E
- 在这个deque中保存的元素的类型
- All Superinterfaces:
-
Collection<E>
,Iterable<E>
,Queue<E>
- All Known Subinterfaces:
-
BlockingDeque<E>
- 所有已知实现类:
-
ArrayDeque
,ConcurrentLinkedDeque
,LinkedBlockingDeque
,LinkedList
public interface Deque<E> extends Queue<E>
支持两端元素插入和移除的线性集合。 名称deque是“双端队列”的缩写,通常发音为“deck”。 大多数Deque
实现对它们可能包含的元素数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deques。该界面定义了访问deque两端元素的方法。 提供了插入,移除和检查元素的方法。 这些方法中的每一种都有两种形式:如果操作失败,则抛出异常,另一种方法返回一个特殊值(根据操作而定)(
null
或false
)。 插入操作的后一种形式专门设计用于容量限制的Deque
实现; 在大多数实现中,插入操作不能失败。上述十二种方法总结在下表中:
Summary of Deque methods First Element (Head) Last Element (Tail) Throws exception Special value Throws exception Special value InsertaddFirst(e)
offerFirst(e)
addLast(e)
offerLast(e)
RemoveremoveFirst()
pollFirst()
removeLast()
pollLast()
ExaminegetFirst()
peekFirst()
getLast()
peekLast()
此界面扩展了
Comparison of Queue and Deque methodsQueue
界面。 当使用deque作为队列时,FIFO(先进先出)行为的结果。 元素将添加到deque的末尾,并从头开始删除。 从Queue
接口继承的方法正好等同于Deque
方法,如下表所示:Queue
Method EquivalentDeque
Methodadd(e)
addLast(e)
offer(e)
offerLast(e)
remove()
removeFirst()
poll()
pollFirst()
element()
getFirst()
peek()
peekFirst()
Deques也可以用作LIFO(先进先出)堆栈。 这个接口应该优先于传统的
Comparison of Stack and Deque methods Stack Method EquivalentStack
类。 当一个deque作为一个堆栈时,元素从deque的开头被推出并弹出。 堆栈方法正好等同于Deque
方法,如下表所示:Deque
Methodpush(e)
addFirst(e)
pop()
removeFirst()
peek()
peekFirst()
请注意,当使用deque作为队列或堆栈时,
peek
方法同样适用; 在任何一种情况下,元素都是从德甲开始绘制的。此接口提供两种方法来清除内部元素,
removeFirstOccurrence
和removeLastOccurrence
。与
List
接口不同,此接口不支持索引对元素的访问。尽管不严格要求
Deque
实现来禁止插入空元素,但是强烈建议这样做。 任何用户Deque
强烈建议实现,也允许null元素不采取插入空的能力优势。 这是因为null
被用作特殊的返回值通过各种方法来表示deque是空的。Deque
实现通常不定义基于元素的版本的equals
和hashCode
方法,而是继承从类别Object
的基于身份的版本。此接口是Java Collections Framework的成员。
- 从以下版本开始:
- 1.6
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 boolean
add(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行此操作,而不会违反容量限制,true
在成功后返回true
,如果当前没有可用空间,则抛出IllegalStateException
。boolean
addAll(Collection<? extends E> c)
在指定集合的末尾添加指定集合中的所有元素,如同通过按照集合的迭代器返回的顺序调用每个 元素addLast(E)
一样 。void
addFirst(E e)
如果可以立即在没有违反容量限制的情况下将指定的元素插入到此deque的前面,如果当前没有可用空间,则抛出一个IllegalStateException
。void
addLast(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,则抛出一个IllegalStateException
如果当前没有可用空间)。boolean
contains(Object o)
如果此deque包含指定的元素,则返回true
。Iterator<E>
descendingIterator()
以相反的顺序返回此deque中的元素的迭代器。E
element()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。E
getFirst()
检索,但不删除,这个deque的第一个元素。E
getLast()
检索,但不删除,这个deque的最后一个元素。Iterator<E>
iterator()
以正确的顺序返回此deque中的元素的迭代器。boolean
offer(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true
在成功和false
,如果当前没有空间可用。boolean
offerFirst(E e)
在此deque的前面插入指定的元素,除非它会违反容量限制。boolean
offerLast(E e)
在此deque的末尾插入指定的元素,除非它会违反容量限制。E
peek()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回null
。E
peekFirst()
检索但不删除此deque的第一个元素,如果此deque为空,则返回null
。E
peekLast()
检索但不删除此deque的最后一个元素,如果此deque为空,则返回null
。E
poll()
检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回null
。E
pollFirst()
检索并删除此deque的第一个元素,如果此deque为空,则返回null
。E
pollLast()
检索并删除此deque的最后一个元素,如果此deque为空,则返回null
。E
pop()
从这个deque表示的堆栈中弹出一个元素。void
push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作,而不会违反容量限制,如果当前没有可用空间,则抛出一个IllegalStateException
。E
remove()
检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。boolean
remove(Object o)
从此deque中删除指定元素的第一个出现。E
removeFirst()
检索并删除此deque的第一个元素。boolean
removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。E
removeLast()
检索并删除此deque的最后一个元素。boolean
removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。int
size()
返回此deque中的元素数。-
Methods inherited from interface java.util.Collection
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray
-
-
-
-
方法详细信息
-
addFirst
void addFirst(E e)
如果可以在不违反容量限制的情况下立即将其指定的元素插入到此deque的前面,如果当前没有可用的空间,则抛出一个IllegalStateException
。 当使用容量限制的deque时,通常优选使用方法offerFirst(E)
。- 参数
-
e
- 要添加的元素 - 异常
-
IllegalStateException
- 如果由于容量限制,此时无法添加该元素 -
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,此deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
addLast
void addLast(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,如果当前没有可用的空间,则抛出一个IllegalStateException
。 当使用容量限制的deque时,通常优选使用方法offerLast(E)
。此方法相当于
add(E)
。- 参数
-
e
- 要添加的元素 - 异常
-
IllegalStateException
- 如果由于容量限制,此时无法添加该元素 -
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且此deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
offerFirst
boolean offerFirst(E e)
在此deque的前面插入指定的元素,除非它会违反容量限制。 当使用容量限制的deque时,该方法通常比addFirst(E)
方法更为方便 ,只能通过抛出异常来插入元素。- 参数
-
e
- 要添加的元素 - 结果
-
true
如果元素添加到此deque,否则为false
- 异常
-
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且此deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
offerLast
boolean offerLast(E e)
在此deque的末尾插入指定的元素,除非它会违反容量限制。 当使用容量限制的deque时,这种方法通常比addLast(E)
方法更为方便 ,只能通过抛出异常来插入元素。- 参数
-
e
- 要添加的元素 - 结果
-
true
如果元素被添加到此deque,否则为false
- 异常
-
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且该deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
removeFirst
E removeFirst()
检索并删除此deque的第一个元素。 此方法与pollFirst
的区别仅在于,如果此deque为空,那么它将抛出异常。- 结果
- 这个德克的头
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
removeLast
E removeLast()
检索并删除此deque的最后一个元素。 此方法与pollLast
的不同之处在于,如果此deque为空,它将抛出异常。- 结果
- 这个德克的尾巴
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
pollFirst
E pollFirst()
检索并删除此deque的第一个元素,如果此deque为空,则返回null
。- 结果
-
这个deque的头,或
null
如果这个deque是空的
-
pollLast
E pollLast()
检索并删除此deque的最后一个元素,如果此deque为空,则返回null
。- 结果
-
这个deque的尾巴,或
null
如果这个deque是空的
-
getFirst
E getFirst()
检索,但不删除,这个deque的第一个元素。 此方法与peekFirst
不同之处在于,如果此deque为空,它将抛出异常。- 结果
- 这个德克的头
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
getLast
E getLast()
检索,但不删除,这个deque的最后一个元素。 此方法与peekLast
的不同之处在于,如果此deque为空,它将抛出异常。- 结果
- 这个德克的尾巴
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
peekFirst
E peekFirst()
检索但不删除此deque的第一个元素,如果此deque为空,则返回null
。- 结果
-
这个deque的头,或
null
如果这个deque是空的
-
peekLast
E peekLast()
检索但不删除此deque的最后一个元素,如果此deque为空,则返回null
。- 结果
-
这个deque的尾巴,或
null
如果这个deque是空的
-
removeFirstOccurrence
boolean removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e
使得Objects.equals(o, e)
(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
。- 参数
-
o
- 要从此deque中删除的元素(如果存在) - 结果
-
true
如果一个元素被删除作为此调用的结果 - 异常
-
ClassCastException
- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException
- 如果指定的元素为空,并且该deque不允许空元素( optional )
-
removeLastOccurrence
boolean removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。 如果deque不包含元素,则它不变。 更正式地,删除最后一个元素e
,使得Objects.equals(o, e)
(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
。- 参数
-
o
- 要从此deque中删除的元素(如果存在) - 结果
-
true
如果一个元素被删除作为这个调用的结果 - 异常
-
ClassCastException
- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException
- 如果指定的元素为空,此deque不允许空元素( optional )
-
add
boolean add(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),如果可以立即执行,而不违反容量限制,true
在成功后返回true
,如果当前没有可用空间,则抛出IllegalStateException
。 当使用容量限制的deque时,通常最好使用offer
。此方法相当于
addLast(E)
。- Specified by:
-
add
在接口Collection<E>
- Specified by:
-
add
在接口Queue<E>
- 参数
-
e
- 要添加的元素 - 结果
-
true
(由Collection.add(E)
指定) - 异常
-
IllegalStateException
- 如果由于容量限制,此时无法添加该元素 -
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且该deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
offer
boolean offer(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true
在成功和false
,如果当前没有空间可用。 当使用容量限制的deque时,这种方法通常比add(E)
方法更为方便 ,只能通过抛出异常来插入元素。此方法相当于
offerLast(E)
。- Specified by:
-
offer
在接口Queue<E>
- 参数
-
e
- 要添加的元素 - 结果
-
true
如果元素被添加到此deque,否则为false
- 异常
-
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且此deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止其添加到此deque
-
remove
E remove()
- Specified by:
-
remove
在接口Queue<E>
- 结果
- 由这个德克队代表的队列的头
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
poll
E poll()
检索并删除由此deque(换句话说,此deque的第一个元素)表示的队列的头部,或者如果此deque为空,则返回null
。此方法相当于
pollFirst()
。
-
element
E element()
- Specified by:
-
element
在接口Queue<E>
- 结果
- 由这个德克队代表的队列的头
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
peek
E peek()
检索但不删除由此deque表示的队列的头部(换句话说,此deque的第一个元素),如果此deque为空,则返回null
。此方法相当于
peekFirst()
。
-
addAll
boolean addAll(Collection<? extends E> c)
在指定的集合的末尾添加指定集合中的所有元素,就像通过按照集合的迭代器返回的顺序调用每个元素addLast(E)
一样 。当使用容量限制的deque时,通常最好在每个元素上单独调用
offer
。尝试添加元素时遇到的异常可能会导致在抛出关联的异常时成功添加了一些元素。
- Specified by:
-
addAll
在接口Collection<E>
- 参数
-
c
- 要插入此deque的元素 - 结果
-
true
如果这个deque由于调用而改变了 - 异常
-
IllegalStateException
- 如果不是所有的元素可以在此时由于插入限制添加 -
ClassCastException
- 如果指定集合的元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的集合包含一个空元素,并且该deque不允许空元素,或者如果指定的集合为空 -
IllegalArgumentException
- 如果指定集合的元素的某些属性阻止将其添加到此deque - 另请参见:
-
Collection.add(Object)
-
push
void push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作而不违反容量限制,则抛出IllegalStateException
如果当前没有可用空间)。此方法相当于
addFirst(E)
。- 参数
-
e
- 要推的元素 - 异常
-
IllegalStateException
- 如果由于容量限制,此时无法添加该元素 -
ClassCastException
- 如果指定元素的类阻止将其添加到此deque -
NullPointerException
- 如果指定的元素为空,并且此deque不允许空元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此deque
-
pop
E pop()
- 结果
- 这个deque前面的元素(它是由这个deque表示的堆栈的顶部)
- 异常
-
NoSuchElementException
- 如果这个deque是空的
-
remove
boolean remove(Object o)
从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e
,使得Objects.equals(o, e)
(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true
。此方法相当于
removeFirstOccurrence(Object)
。- Specified by:
-
remove
在接口Collection<E>
- 参数
-
o
- 要从此deque移除的元素(如果存在) - 结果
-
true
如果某个元素因此调用而被删除 - 异常
-
ClassCastException
- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException
- 如果指定的元素为空,此deque不允许空元素( optional )
-
contains
boolean contains(Object o)
如果此deque包含指定的元素,则返回true
。 更正式地,返回true
如果且仅当此deque包含至少一个元素e
,使得Objects.equals(o, e)
。- Specified by:
-
contains
在接口Collection<E>
- 参数
-
o
- 要在此deque中存在的元素要进行测试 - 结果
-
true
如果此deque包含指定的元素 - 异常
-
ClassCastException
- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException
- 如果指定的元素为空,并且此deque不允许空元素( optional )
-
size
int size()
返回此deque中的元素数。- Specified by:
-
size
在接口Collection<E>
- 结果
- 这个deque中的元素数量
-
-