Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
Deque有三种用途:
普通队列(一端进另一端出):
Queue queue = new LinkedList()或Deque deque = new LinkedList()
双端队列(两端都可进出)
Deque deque = new LinkedList()
堆栈
Deque deque = new LinkedList()
注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
Deque是一个线性collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。
此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。
下表总结了上述 12 种方法:
第一个元素 (头部) | 最后一个元素 (尾部) | ||
---|---|---|---|
抛出异常 | 特殊值 | 抛出异常 | 特殊值 |
插入 | addFirst(e) | offerFirst(e) | addLast(e) |
删除 | removeFirst() | pollFirst() | removeLast() |
检查 | getFirst() | peekFirst() | getLast() |
Deque接口扩展(继承)了 Queue 接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法,如下表所示:
Queue方法 | 等效Deque方法 |
---|---|
add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于 Deque 方法,如下表所示:
堆栈方法 | 等效Deque方法 |
---|---|
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |
方法 | 说明 |
---|---|
add方法 | 往队列尾部加入元素 |
addFirst方法 | 往队列首部加入元素 |
addLast方法 | 往队列尾部加入元素 |
contains方法 | 判断队列中是否包含某个元素 |
descendingIterator方法 | 以相反的顺序返回deque |
element方法 | 检索但不删除返回队列的头部 |
getFirst方法 | 与element相同,检索但不删除返回第一个元素,具体不知道为什么会有重复的方法,应该是版本更新兼容吧,就语义来说这个好一点 |
getLast方法 | 检索并返回最后一个元素 |
iterator方法 | 以正确的顺序返回此元素的迭代器 |
offer方法 | 将指定元素插入该元素的尾部,返回true或者false,与add的区别是add当没有可用空间时会抛异常,而offer返回false |
offerFirst方法 | 在双端队列头部插入元素 |
offerLast方法 | 在双端队列尾部插入元素,同offer一样,为了Queue和Deque兼容 |
peek()方法和peekFirst/peekLast方法 | 返回但不删除双端队列的首元素/尾元素 |
poll方法和pollFirst/pollLast方法 | poll检索并删除队列的首元素,pollFirst也是,pollLast检索并删除队列的尾元素 |
pop方法 | pop从这个deque表示的堆栈中弹出一个元素,与poll不同的是pop当为空时会报异常,而poll会返回null |
push方法 | 在此deque的首部添加元素 |
remove方法以及removeFirst/removeLast方法 | remove和removeFirst检索并删除队列中第一个元素,removeLast检索并删除队列中最后一个元素(同poll相同,就不演示了) |
size方法 | 返回此的确中的元素数 |
本文作者:Weee
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!