Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
- 线性集合,支持两端插入和移除元素。大多数Deque实现对它们可能包含的元素数量没有固定限制。
- 此接口定义了访问双端队列两端元素的方法。 提供了插入,移除和检查元素的方法。一种在操作失败时抛出异常,另一种返回特殊值( null或false ,具体取决于操作)
| 操作第一个元素 | 操作最后一个元素 |
| 抛出异常 | 特殊值 | 抛出异常 | 特殊值 |
插入 | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
删除 | removeFirst() | pollFirst() | removeLast() | pollLast() |
检查 | getFirst() | peekFirst() | getLast() | peekLast() |
- 接口扩展了Queue接口。 当deque用作队列时,会产生FIFO(先进先出)行为。 元素在双端队列的末尾添加并从头开始删除。 继承自Queue接口的方法与Deque方法完全等效,如下表所示:
Queue方法 | 等效Deque方法 |
add add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
- Deques也可以用作LIFO(后进先出)堆栈。 应优先使用此接口,而不是旧版Stack 。 当deque用作堆栈时,元素将从双端队列的开头推出并弹出。 堆栈方法相当于Deque方法,如下表所示:
堆栈方法 | 等效Deque方法 |
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |
LinkedList既可以作为队列QUEUE,又可以作为栈,因为其队列的offer/add方法,和栈的push方法的区别:
offer/add方式是往尾部添加元素;
push方法是往头部添加元素;
队列的poll方法和栈的pop方法都是删除第一个元素。