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

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

Java集合篇:Stack相关推荐

  1. java comparable接口_Java面试题之Java集合篇三

    Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...

  2. Java集合之Stack(出自Java知识体系)

    安琪拉正在梳理Java知识体系,这篇讲Java集合的Stack.如果希望获取完整的<安琪拉Java知识体系>整理中, 完成后公众号回复"知识体系" 即可获取. 完整的J ...

  3. Java集合篇:集合细节:为集合指定初始容量、asList的缺陷、subList的缺陷

    一.为集合指定初始容量: 集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候 ...

  4. Java集合篇:Map总结

    相关阅读: Java基础篇:hashCode的作用 Java集合篇:HashMap原理详解(JDK1.7及之前的版本) Java集合篇:HashMap原理详解(JDK1.8) Java集合篇:Hash ...

  5. Java集合篇:fail-fast机制 与 fail-safe

    在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...

  6. step协议 java_【转】Step By Step:Java 集合篇

    1.    Java集合类库中最重要的两个接口Collection和Map,其中Collection接口又再次划分为 List和Set两大子接口,List中可以包含重复的元素,Set中则不可以.以下列 ...

  7. Java集合篇:集合类介绍

    上面的图展示了整个集合大家族的成员以及他们之间的关系.下面就上面的各个接口.基类做一些简单的介绍(主要介绍各个集合的特点,区别). 一.Collection接口: Collection接口是最基本的集 ...

  8. Java集合—Deque Stack

    原文作者:惊帆的BLOG 原文地址:Java中的Deque和Stack的内部原理区别 关于Deque 和 Stack,如果没有对API有很仔细的研究,单纯从使用上来说,很难仔细发现他们中间的区别,虽然 ...

  9. 超详细的Java面试题总结(三)之Java集合篇常见问题

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 List,Set,Map三者的区别及总结 List:对付顺序的好帮手 Li ...

最新文章

  1. java 反射 orm_Java-反射机制简介
  2. Debian 和Ubuntu Mono 3.0 部署包
  3. Java并发编程的艺术,解读并发编程的优缺点
  4. 如何deactivate Material delta download
  5. 『数据库』数据库笔记
  6. php的create_function、function_exists判断函数是否存在
  7. 数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化「看得见」!...
  8. jq ajax traditional,jQuery ajax - param() 方法
  9. leetcode:Happy Number
  10. 分享大三改进后的python写的【银行管理系统】,超详细 【内附源码】
  11. 标签打印软件如何设计正反面打印模式
  12. Unity Editor 画地面贴图工具
  13. 分享一个小玩意 真菌UNITE物种分类数据库
  14. php consult用法,YanPHP: YanPHP——一个为API开发而设计的高性能轻量级框架
  15. 知乎高赞:35岁失业的程序员,最后都去了哪儿?是在路边摊炒粉和做烤鸭?...
  16. 直播搭建主播pk,如何实现无缝切换?
  17. 软件测试开发和软件测试的区别
  18. ASP.NET 技巧三
  19. 因果推断会是下一个AI热潮吗?朱迪亚•珀尔新作《因果论》重磅上市!
  20. 阿里小号给106号码发短信

热门文章

  1. 物理化学 化学 动力学(下)
  2. django自定义过滤器及模板标签
  3. ACM旗舰期刊最新综述:一览端到端人脸识别最新进展
  4. 杭州内推 | 阿里达摩院机器智能技术团队招聘多模态方向研究型实习生
  5. 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
  6. 如何构建行业知识图谱 (以医疗行业为例)
  7. Github项目推荐 | OI Wiki:编程竞赛最全知识整合站点
  8. 岗位推荐 | 腾讯招聘自然语言处理方向实习生
  9. 线上报名 | 高性能深度学习推理引擎 TensorRT 实战编程讲解
  10. nn.LayerNorm的参数