Deque 接口继承自 Queue 接口,deque 是 double ended queue 的缩写,发音类似于 deck。
双端操作
Queue 只能“尾部插入,头部取出”,但 Deque 的头部和尾部都能进行操作,并提供了两套方法:
public interface Deque<E> extends Queue<E> {
// insert oprations
void addFirst(E e); void addLast(E e);
boolean offerFirst(E e); boolean offerLast(E e);
// remove oprations
E removeFirst(); E removeLast();
E pollFirst(); E pollLast();
// examine oprations
E getFirst(); E getLast();
E peekFirst(); E peekLast();
...
}
上述方法的总结如下表所示:
| 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() | 返回不删除 | 
Deque 与 Queue
虽然 Deque 接口新定义了一套方法(如上所示),但由于其继承自 Queue 接口,所以 Deque 自然也继承了 Queue 声明的方法,它们的对应关系如下所示:
| Throws exception | Special value | |||
|---|---|---|---|---|
| Queue 方法 | Deque 等效方法 | Queue 方法 | Deque 等效方法 | |
| insert | add(e) | addLast(e) | offer(e) | offerLast(e) | 
| remove | remove() | removeFirst() | poll() | pollFirst() | 
| examine | element() | getFirst() | peek() | peekFirst() | 
Deque 与 Stack
栈是一个后进先出(LIFO)队列,由于 Deque 可以进行双端操作,所以 Deque 接口声明如下方法:
// Stack methods 
void push(E e);        // 相当于 addFirst(e)
E pop();            // 相当于 removeFirst()
如果想使用栈结构,不要使用遗留类 —— Stack,而应该使用 ArrayDeque 或 LinkedList 。
其它方法
除了上述方法外, Deque 接口还声明了如下几个方法:
boolean removeFirstOccurrence(Object o);
boolean removeLastOccurrence(Object o);
Iterator<E> descendingIterator();
null 限制
Deque 接口并未限制 element 不能为 null,但鼓励接口实现类禁止 element 为 null 。因为 poll() 、 pollFirst() 、 pollLast() 和 peek() 、 peekFirst() 、 peekLast() 在 deque 为空时都返回 null ,如果实现类允许 element 为 null ,则无法判断上述方法返回的 null 究竟是 element 为 null ,还是 deque 为空。
 
                         
                                

