Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
通常发音为 deck,deque 是双端队列。双端队列是元素的线性集合,支持在两个端点处插入和移除元素。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 而方法 removeFirst 和 removeLast 当 Deque 实例为空时抛出异常。
方法 getFirst 和 peekFirst 获取 Deque 实例的第一个元素。这些方法不会从 Deque 实例中移除该值。类似地,方法 getLast 和 peekLast 获取最后一个元素。如果 deque 实例为空,则方法 getFirst 和 getLast 会抛出异常,而方法 peekFirst 和 peekLast 返回 NULL。
插入,移除和检索(译注:前文中检查为 examine,获取为 retrieve,此处为检索 retieval 应该是错误,可能应该为 retrieval) 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。