思路
- 用两个栈,一个进栈一个出栈来模拟队列。
补充:Java中为什么推荐使用Deque(双端队列)而不推荐使用Stack?
- ArrayDeque、LinkedList、Stack三者的关系如下图所示,其中Stack继承自Vector,LinkedList实现了List接口和Deque接口,ArrayDeque实现了Deque接口。
- 为什么不推荐使用Stack?
-
- 首先,现在基本都不用Vector了,算是一个Java古老类,写的不太行的古老类,所以自然Stack也不太行。
- Vector主要是因为其效率不行,很多方法都添加了synchronized修饰,虽然线程安全,但是现在像ArrayDeque、LinkedList这种线程不安全的,在需要安全的时候也可以用Collections.synchronizedCollection()转换为线程安全的,基本算是替代了Vector。
- Stack只能上进上出,而Deque上进上出,上进下出,甚至下进上出都行,非常灵活。
- ArrayDeque和LinkedList有什么区别呢?
-
- 前者是数组结构,后者是链表结构。
- 前者插入的元素可以为null,后者可以为null。
- 前者无法确定数据量的时候,后期扩容会影响效率;后者无法确定数据量的时候则不会影响。
- ArrayDeque中的pop()和poll()方法返回结果没区别,只是在意义上面前者代表出栈,后者代表出队列
具体使用那些函数,见以下两个链接