本教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
通常发音为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。
插入、删除和检索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。