Java集合篇:Stack

Java集合篇:Stack

在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下:

Java集合篇:Stack

 Stack通过五个操作对Vector进行扩展,允许将向量视为堆栈。这个五个操作如下:

操作 操作
empty() 测试堆栈是否为空。
peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
push(E item) 把项压入堆栈顶部。
search(Object o) 返回对象在堆栈中的位置,以 1 为基数。

  Stack继承Vector,他对Vector进行了简单的扩展:

public class Stack<E> extends Vector<E>

 Stack的实现非常简单,仅有一个构造方法,五个实现方法(从Vector继承而来的方法不算与其中),同时其实现的源码非常简单:

/**
     * 构造函数
     */
    public Stack() {
    }
 
    /**
     *  push函数:将元素存入栈顶
     */
    public E push(E item) {
        // 将元素存入栈顶。
        // addElement()的实现在Vector.java中
        addElement(item);
 
        return item;
    }
 
    /**
     * pop函数:返回栈顶元素,并将其从栈中删除
     */
    public synchronized E pop() {
        E    obj;
        int    len = size();
 
        obj = peek();
        // 删除栈顶元素,removeElementAt()的实现在Vector.java中
        removeElementAt(len - 1);
 
        return obj;
    }
 
    /**
     * peek函数:返回栈顶元素,不执行删除操作
     */
    public synchronized E peek() {
        int    len = size();
 
        if (len == 0)
            throw new EmptyStackException();
        // 返回栈顶元素,elementAt()具体实现在Vector.java中
        return elementAt(len - 1);
    }
 
    /**
     * 栈是否为空
     */
    public boolean empty() {
        return size() == 0;
    }
 
    /**
     *  查找“元素o”在栈中的位置:由栈底向栈顶方向数
     */
    public synchronized int search(Object o) {
        // 获取元素索引,elementAt()具体实现在Vector.java中
        int i = lastIndexOf(o);
 
        if (i >= 0) {
            return size() - i;
        }
        return -1;
    }

注:Stack类的设计是有缺陷的,在《Java编程思想》中明确提出了不应该使用Stack类,而是使用LinkedList该构建栈。

 

原文地址:https://blog.csdn.net/chenssy/article/details/37756539

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114660.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月4日 下午1:00
下一篇 2021年10月4日 下午2:00


相关推荐

  • 体检信息管理系统功能表

    体检信息管理系统功能表

    2022年1月30日
    72
  • 硬件知识:DP接口和HDMI接口对比,看完你就懂了!

    硬件知识:DP接口和HDMI接口对比,看完你就懂了!电脑显示器高清传输通过会用到两个接口,就是DP接口和HDMI接口,今天电脑学习小编带大家对比一下这两个接口。一、DP接口DisplayPort缩写DP,是一个由PC及芯片制造商联盟开发,视…

    2022年7月22日
    44
  • 如何使用浏览器的F12开发者工具调试页面?

    如何使用浏览器的F12开发者工具调试页面?一 背景介绍通常前端程序员在按照 UI 效果图编辑网页时 不可能一口将全部的代码全部写好 通常情况是编写边调 经过反反复复的调试后才能达到要求的效果 这时候用 Chrome 浏览器的 F12 开发者工具能形象直观的帮助程序员调试自己的代码 用好 F12 能显着提高开发者的工作效率 加快调试的速度 二 知识剖析 1 F12 开发人员工具是一套按需采用的工具 网站开发人员可以随时在任何网页上使用 F

    2026年3月18日
    1
  • ExtJs自学教程(1):一切从API開始

    ExtJs自学教程(1):一切从API開始

    2021年12月1日
    46
  • 理解Dilation convolution

    理解Dilation convolution论文 Multi scalecontext 简单讨论下 dilatedconv 中文可以叫做空洞卷积或者扩张卷积 首先介绍一下 dilatedconv 诞生背景 4 再解释 dilatedconv 操作本身 以及应用 首先是诞生背景 在图像分割领域 图像输入到 CNN 典型的网络比如 FCN 3 中 FCN 先像传统的 C

    2026年3月19日
    2
  • python—各种常用函数及库

    python—各种常用函数及库列表 list1 append x nbsp nbsp nbsp nbsp nbsp 将 x 添加到列表末尾 list1 sort nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 对列表元素排序 list1 reverse nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 将列表元素逆序 list1 index x nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 返回第一次出现元素 x 的索引值 list1 insert i x nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在位置 i 处插入新元素 xlist1 count x nbsp

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号