双端队列(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。
