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

  

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

       操作                                           说明

empty()

测试堆栈是否为空。

peek()

查看堆栈顶部的对象,但不从堆栈中移除它。

pop()

移除堆栈顶部的对象,并作为此函数的值返回该对象。

push(E item)

把项压入堆栈顶部。

search(Object o)

返回对象在堆栈中的位置,以 1 为基数。

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

  

  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的源码很多都是基于Vector,所以这里不再累述,更多详情请参考:Vector相关内容

  以上内容均来自http://www.cnblogs.com/chenssy/博客,此博客为本人学习笔记

31.Stack的更多相关文章

  1. 【转】Xamarin Forms 介绍

    特此声明,本篇博文转自:http://blog.csdn.net/kinfey/article/details/29621381 什么是 Xamarin Forms ? Xamarin Forms 是 ...

  2. C++异常处理小例

      学习程序的好方法是阅读代码和改进代码.下面的程例来自<An Overview of the C++ Programming Language>(5.1 异常和错误处理)程序用途:使用C ...

  3. NDK常见错误

    1.错误1: android mk文件没有定义 $ ndk-buildAndroid NDK: Your APP_BUILD_SCRIPT points to an unknown file: /cy ...

  4. PHP 注册错误和异常处理机制

    注册错误和异常处理机制有三个PHP函数需要学习 1. register_shutdown_function('Bootstrap\Library\Frame::fatalError'); 2. set ...

  5. Cyber Apocalypse 2021 pwn write up

    Controller 考点是整数溢出和scanf函数的引发的栈溢出漏洞,泄露libc地址将返回地址覆盖成one_gadgets拿到shell. 1 from pwn import * 2 3 p = ...

  6. 城市代码表mysql

    只有代码: # ************************************************************ # Sequel Pro SQL dump # Version ...

  7. 如何在CentOS 7 / Fedora 31/30/29上安装ELK Stack

    原文地址:https://computingforgeeks.com/how-to-install-elk-stack-on-centos-fedora/ 原作者: Josphat Mutai 译者: ...

  8. 第31题:LeetCode946. Validate Stack Sequences验证栈的序列

    题目 给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true:否则,返回 false . 示例 1: 输入: ...

  9. C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)

    我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...

随机推荐

  1. Failed to install gems via Bundler

    问题:在执行git push heroku master时,程序报错. 解决办法: 1.bundle update 2.git add . 3.git commit -m "message& ...

  2. TZOJ 2703 Cow Digit Game(sg博弈)

    描述 Bessie is playing a number game against Farmer John, and she wants you to help her achieve victor ...

  3. 作业四:个人项目-小学四则运算之JAVA版

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186 代码所在的github远程仓库的地址:https://git ...

  4. 分支&循环

    分支 单分支 if 条件: 满足条件后要执行的代码 双分支 if 条件: 满足条件执行代码 else: if条件不满足就走这段 多分支: if 条件: 满足条件执行代码 elif 条件: 上面的条件不 ...

  5. Git实际操作

    1.基本操作 git init 初始化仓库 git status 查看仓库状态 git add XXX.XX 向暂存区中添加文件XXX.XX git commit 保存仓库的历史记录 git log ...

  6. spring-boot自定义favicon.ico文件

    一.将ico文件存放到resources目录的static中的favicon下. 二.在application.properties文件中增加配置 spring.mvc.favicon.enabled ...

  7. 如何打开用eclipse没有.project文件的Java工程

    大概分为以下7个步骤,具体如下: 1.在你的eclipse下新建一个与你想要打开的源代码项目同名的一个项目(我这举例叫myweb). 2.在电脑磁盘中找到刚刚新建的项目,把它生成的.project文件 ...

  8. 面试简单整理之IO

    1.字节流,字符流 整个Java IO体系都是基于字节流(InputStream/OutputStream) 和 字符流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的. 2 ...

  9. 为nginx创建windows服务自启动

    1.下载最新版的 Windows Service Wrapper 程序,比如我下载的名称是 "winsw-1.9-bin.exe",然后,把它命名成你想要的名字(比如: " ...

  10. 自己搭建git服务器

    1.安装git 2.创建git用户,给权限(git目录下) 3.设置公钥 4.初始化git仓库 5.给权限(仓库) 连接到本地