双端队列(deque)通常发音为deck
,是双端队列(double-ended-queue)的缩写。双端队列是元素的线性集合,支持在两个端点处元素的插入和移除。Deque
接口是比Stack
和Queue
更丰富的抽象数据类型,因为它同时实现了堆栈和队列。Deque
接口定义用于访问Deque
实例两端的元素的方法。提供了用于插入,删除和检查元素的方法。诸如ArrayDeque
和LinkedList
之类的预定义类实现了Deque
接口。
请注意,Deque
接口既可以用作后进先出堆栈,又可以用作先进先出队列。Deque
接口中给出的方法分为三个部分:
插入
addfirst
和offerFirst
方法在Deque
实例的开头插入元素。方法addLast
和offerLast
在Deque
实例的末尾插入元素。当Deque
实例的容量受到限制时,首选方法为offerFirst
和offerLast
,因为addFirst
在已满的情况下可能无法抛出异常。
去掉
removeFirst
和pollFirst
方法从Deque
实例的开头删除元素。removeLast
和pollLast
方法从末尾删除元素。 如果Deque
为空,则方法pollFirst
和pollLast
返回null
;如果Deque
实例为空,则方法removeFirst
和removeLast
抛出异常。
取回
方法getFirst
和peekFirst
检索Deque
实例的第一个元素。这些方法不会从Deque
实例中删除值。同样,方法getLast
和peekLast
检索最后一个元素。如果双端队列实例为空,则方法getFirst
和getLast
抛出异常,而方法peekFirst
和peekLast
返回NULL
。
下表总结了Deque
元素的12种插入,删除和重新绑定方法:
双端队列方法
操作类型 | 第一个元素(Deque 实例开始) |
最后一个元素(Deque 实例结束) |
---|---|---|
插入 | addFirst(e) offerFirst(e) |
addLast(e) offerLast(e) |
去掉 | removeFirst() pollFirst() |
removeLast() pollLast() |
检查 | getFirst() peekFirst() |
getLast() peekLast() |
除了这些用于插入,删除和检查Deque
实例的基本方法之外,Deque
接口还具有一些其他预定义的方法。其中之一是removeFirstOccurence
,如果指定元素在Deque
实例中存在,则此方法将删除该元素的首次出现。如果元素不存在,则Deque
实例保持不变。另一个类似的方法是removeLastOccurence
; 此方法删除Deque
实例中指定元素的最后一次出现。这些方法的返回类型为boolean
,如果元素存在于Deque
实例中,则它们返回true
。