java不使用Stack

文章讨论了Java中Stack类的继承问题,推荐使用Deque接口实现栈,指出vector的线程安全可能带来的性能开销。同时提到两种实现方式——动态数组和链表,根据实际需求选择合适的底层数据结构。
摘要由CSDN通过智能技术生成

原文连接:http://t.csdnimg.cn/YyYmV

一 官方建议

在这里插入图片描述

二 总结

  1. 为了兼容性而保留
  2. 继承于vector
    与vector不是组合关系,而是继承关系,也就是vector的一些操作也可以有效,不限于栈的特性操作push,pop,peek;连Stack.add也是有效的
  3. 应该是面向接口的方式
  • Stack是一个继承于vector的类
  • 官方推荐使用Deque接口,作为实现栈的接口:双端队列,虽然也和Stack类一样,会有一些其他的无关栈的操作,但是因为历史遗留问题,名字已经被占用了,java官方不想重新推出一个Stack的接口;可以自己再对Deque封装一下,就可以是标准栈了
  • 两种实现方式
 Deque<Integer> stack = new LinkeList<>();
 Deque<Integer> stack = new ArrayDeque<Integer>();

补充:

  1. 两种实现方式,分别符合动态数组和链表数据结构的特性,具体可看原文。
  2. Vector 类不仅仅是一个动态数组,而且保证了线程安全,但多数情况下不需要线程安全,这样有时候就有点浪费了,因为保证线程安全需要上锁,有额外的系统开销。所以看情况来选择所使用的底层数据结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值