尽量用ArrayDeque模拟栈和队列
循环数组实现的双端队列,进而模拟栈和队列!
ArrayDeque底层是循环数组,JDK官方明确用ArrayDeque替换Stack,但是为什么Stack还常见呢?(尤其在LC刷题的时候,可以看到很多的小伙伴在用Stack)可能一个原因是Stack这个词语比较友好,能让大家在想到栈的时候直接用
但是Stack的缺点却很多:
-
性能低
继承Vector类,其所有方法被synchronized修饰,因此虽然线程安全但是效率很差;(刷题若追求效率建议换)
-
破坏了栈这种数据结构
也正是由于继承了Vector类,因此对于用Stack定义的对象可以调用的方法不仅仅局限于push/peek/pop,还可以调用父类的get()(按照索引获取栈中的元素)等方法,这样就容易破坏栈的这种数据结构,这是我们不希望看到的
但是为了兼顾一些老项目,因此我们也不能够完全放弃使用Stack,这也就是JDK官网没有将Stack加@Deprecated注解的原因