【数据结构与算法】栈

一、特点:LIFO, (Last In First Out)
二、基本操作:

  • push(入栈)
  • pop(出栈)

三、可以用数组实现
四、Java实现
java.util.Stack继承java.util.Vector(向量)
由于以下原因已不推荐使用
1 . 使用synchronized关键字影响效率
2 . 使用继承

Vector 类的实现和 ArrayList 比较接近,都是基于数组及扩容操作来完成的。只是 Vector 类为了保证线程安全性,在每个方法的声明中都使用了 synchronized 关键字,这势必会影响它的性能。Satck 类则是扩展了 Vector 类,实现了栈的各种操作。由于 Stack 类继承自 Vector,则同样继承了 Vector 类的各种方法。这个其实比较奇怪,因为对栈操作只需要入栈和出栈操作就可以了,完全可以不使用继承的方式,而使用包含的方式,即在Satck对象中使用 Vector 的引用。之所以采用了继承的方式,估计还是因为历史的包袱吧。

官方已经不推荐使用 Vector 和 Stack。
要使用线程安全的 List,可以用 Collections.synchronizedList 来包裹 ArrayList,或者java.util.concurrent.CopyOnWriteArrayList
至于栈,则推荐使用 Deque 接口的实现,如 LinkedList 和 ArrayDeque。或者java.util.concurrent.ConcurrentLinkedDeque 或者java.util.concurrent.ConcurrentLinkedQueue

五、应用

  • Java虚拟机中,每个线程实例都有自己的栈。
    • 方法栈
    • 操作数栈
  • 括号匹配、html标签匹配等

参考:
http://blog.jrwang.me/2016/java-collections-vector-stack/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值