再leetcode刷到了一个单调栈的题 我一直都是用Stack 看了下题解大家都在用Deque 去搜了一下这两者的区别
首先我们先看一张图
ArrayDeque , LinkedList , Stack的关系如上图所示
Stack实现了Vector接口,LinkKist实现了Deque,List接口,ArrayDeque实现了Deque接口
那为什么大家都用Deque而不用Stack呢
因为Vector是当初JAVA曾经写得不太行的类,所以Stack也不太行。
Vector不行是因为效率不太行,很多方法都用了synchronized修饰,虽然线程安全,但是像ArrayDeque,LinkedList这些线程不安全的,在需要安全的时候也可以用Collections.synchronizedCollection()转化成线程安全的,所以Vector就没什么用处了
再根据功能来说
Stack只能上进上出
Deque可以上进上出,上进下出,甚至下进上出等等一系列功能
不会现在还有人不知道使用栈的时候选谁吧?不会吧不会吧
再来看下ArrayDeque和LinkList的
Deque中常用方法:
把Deque当栈用的时候:
把Deque当队列用的时候:
如果需要复杂的功能比如取栈顶和取队尾需要用以下方法
从上面(头部)插入:
从上面(头部)出来/观察:
从下面(尾部)插入:
从下面(尾部)出来/观察: