原文连接:http://t.csdnimg.cn/YyYmV
一 官方建议
二 总结
- 为了兼容性而保留
- 继承于vector
与vector不是组合关系,而是继承关系,也就是vector的一些操作也可以有效,不限于栈的特性操作push,pop,peek;连Stack.add也是有效的 - 应该是面向接口的方式
- Stack是一个继承于vector的类
- 官方推荐使用Deque接口,作为实现栈的接口:双端队列,虽然也和Stack类一样,会有一些其他的无关栈的操作,但是因为历史遗留问题,名字已经被占用了,java官方不想重新推出一个Stack的接口;可以自己再对Deque封装一下,就可以是标准栈了
- 两种实现方式
Deque<Integer> stack = new LinkeList<>();
Deque<Integer> stack = new ArrayDeque<Integer>();
补充:
- 两种实现方式,分别符合动态数组和链表数据结构的特性,具体可看原文。
- Vector 类不仅仅是一个动态数组,而且保证了线程安全,但多数情况下不需要线程安全,这样有时候就有点浪费了,因为保证线程安全需要上锁,有额外的系统开销。所以看情况来选择所使用的底层数据结构。