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
。