Java中的栈是用Deque还是Stack 看完这篇你就懂了

再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当队列用的时候:
在这里插入图片描述
如果需要复杂的功能比如取栈顶和取队尾需要用以下方法
从上面(头部)插入:
在这里插入图片描述
从上面(头部)出来/观察:
在这里插入图片描述
从下面(尾部)插入:
在这里插入图片描述
从下面(尾部)出来/观察:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43434328/article/details/114668141