Deque是一个双端队列接口(double ended queue),继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
Deque有三种用途:
- 普通队列(一端进另一端出):
- Queue queue = new LinkedList()或Deque deque = new LinkedList()
- 双端队列(两端都可进出)
- Deque deque = new LinkedList()
- 堆栈
- Deque deque = new ArrayDeque()
注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
Queue的12个方法分类:
压入元素(添加):
addFirst:在队列的前面立即加入该元素
offerFirst:在该元素的前面插入指定的元素,除非它违反容量限制。返回 boolean
addLast:在队列的后面立即加入该元素
offerLast:在该元素的后面插入指定的元素,除非它违反容量限制。返回 boolean
add()、offer()
相同:未超出容量,从队尾压入元素,返回压入的那个元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false
弹出元素(删除):remove()、poll()
removeFirst:移除队列的第一个元素
pollFirst:移除队列的第一个元素,除非它为空。返回 boolean
removeLast:移除队列的最后个元素
pollLast:移除队列的最后个元素,除非它为空 。返回 boolean
相同:容量大于0的时候,删除并返回队头被删除的那个元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false
getFirst:获取队列的第一个元素
peekFirst:获取队列的第一个元素。队列为空返回 null
getLast:获取队列的最后一个元素
peekLast:获取队列的第一个元素。队列为空返回 null
获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。
做下小整理:
第一个元素 (头部) | 最后一个元素 (尾部) | |||
---|---|---|---|---|
抛出异常 | 特殊值 | 抛出异常 | 特殊值 | |
插入 | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
删除 | removeFirst() | pollFirst() | removeLast() | pollLast() |
检查 | getFirst() | peekFirst() | getLast() | peekLast() |