本教程适用于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
。