剑指offer——栈与队列相关 Queue,Deque,Stack
使用队列时注意:
判断是否为空(获取但不删除) queue.peek() == null 区别于queue.element()为空时抛异常
添加元素:queue.offer() 满了时 返回false,而add()满了时,会报错
弹出元素:queue.poll() 为空时 返回null, 而remove()满了时,会抛异常
而且要注意:Queue是一个接口,不能直接使用它,而需要使用实现了它的类
Deque双端队列:
Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋壳。
Deque 继承自 Queue,直接实现了它的有 LinkedList, ArayDeque, ConcurrentLinkedDeque 等。
Deque 支持容量受限的双端队列,也支持大小不固定的。一般双端队列大小不确定。
Deque 接口定义了一些从头部和尾部访问元素的方法。比如分别在头部、尾部进行插入、删除、获取元素。和 Queue
类似,每个操作都有两种方法,一种在异常情况下直接抛出异常奔溃,另一种则不会抛异常,而是返回特殊的值,比如 false, null …
参考:Java 集合深入理解(10):Deque 双端队列
栈实现:
- push 入栈
- pop 栈顶元素出栈,并返回
- peek 获取栈顶元素,并不删除
- empty