Java Stack解析

时间:2019-08-24
本文章向大家介绍Java Stack解析,主要包括Java Stack解析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Stack继承自Vector

虽然Stack的可以由Vector封装实现,且底层数据结构都是数组。但是为什么Stack作为一个基础的数据结构,没有像List、Queue以接口的形式继承自Collection,而是Vector的一个子类,个人认为这个逻辑性不是很合理;Set接口的实现如HashSet也是基于HashMap,但是再对外的接口暴露和抽象层级关系上,彼此是隔离的,当然不包含重复元素的列表和哈希表并没有直接关系,彼此是独立的数据结构,声明也表明了这种关系;Stack的实现可以由LinkedList、ArrayList、Vector作为基底集合,但是栈的数据结构的声明应该是独立,不应是一个直接的、继承了List的某实现类的派生类。

Stack是一个线程安全的类,不仅仅由于它的基类是线程安全的,它的子类方法也都是同步方法。为什么Stack需要是线程安全的?这一点我也不理解

Stack的API:

1.push()
入栈

2.pop()
出栈

3.peek()
返回栈顶元素,不出栈

4.empty()
是否为空
为什么不叫isEmpty()呢?父类已存在该方法。两者只是实现上前者利用了Vector的封装方法size(),后者直接判断元素个数,不理解empty()方法的存在意义。

5.search()
从栈顶元素向下,循环该元素第一次出现的位置

Stack的数据结构、API很容易理解,但是JDK里对Stack的实现却让人很费解,网上的讨论多认为这是早期设计不规范所致

原文地址:https://www.cnblogs.com/elinlinlinlog/p/11405940.html