1.概述
Java中实际上提供了java.util.Stack
来实现栈结构,但官方目前已不推荐使用,而是使用java.util.Deque
双端队列来实现队列与栈的各种需求.如下图所示java.util.Deque
的实现子类有java.util.LinkedList
和java.util.ArrayDeque
.顾名思义前者是基于链表,后者基于数据实现的双端队列.
2.功能对比
要讲栈和队列,首先要讲Deque接口。Deque的含义是“double ended queue”,即双端队列,它既可以当作栈使用,也可以当作队列使用。
第一个元素 (头部) | 最后一个元素 (尾部) | |||
| 抛出异常 | 特殊值 | 抛出异常 | 特殊值 |
插入 | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
删除 | removeFirst() | pollFirst() | removeLast() | pollLast() |
检查 | getFirst() | peekFirst() | getLast() | peekLast() |
下表列出了Deque与Queue相对应的接口:
下表列出了Deque与Stack对应的接口:
上面两个表共定义了Deque的12个接口。添加,删除,取值都有两套接口,它们功能相同,区别是对失败情况的处理不同。一套接口遇到失败就会抛出异常,另一套遇到失败会返回特殊值(false或null)。除非某种实现对容量有限制,大多数情况下,添加操作是不会失败的。虽然Deque的接口有12个之多,但无非就是对容器的两端进行操作,或添加,或删除,或查看。明白了这一点讲解起来就会非常简单。
3.使用