前言

开发过程中经常会用到集合,在不用思考的情况下,集合我们肯定是用ArrayList,HashMap,特别点的时候会用到 HashSet。但是,这几个集合类真的是万能的么?针对不同的开发场景,我们需要怎样选择正确的集合呢?那么,这节我们就将一个特别的集合----- Stack,它有一个响亮并且我们不陌生的名字:栈!

今天涉及的知识有:

  1. Stack 原理
  2. Stack 的使用
  3. Stack 和 ArrayList 的区别
  4. 使用示例及结果

一.Stack 原理

首先看段源码:

public class Stack<E> extends Vector<E> {

由此知道 Stack 继承自 Vector,Vector是个什么鬼,接触不多,但我们大概知道它跟 ArrayList 似乎有那么点关系(因为面试的时候会涉及到),具体啥关系,不清楚,那么接着看源码:

public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

这里,我们知道了两点:

  1. Vector 是 AbstractList 子类
  2. Vector 实现了 List 接口
    ok,让我们再稍微追溯下 ArrayList 源码:
public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

ArrayList 是 List 的一个实现类,这大家都清楚,关键是这里我们知道了一个信息:ArrayList 是 AbstractList 子类
那么,ArrayList 和 Vector 关系总算清楚了,他们是哥们关系,并且都继承自 AbstractList
从上面所有的分析,我们知道了Stack 本质也是一个 List。其具备 List 所有方法。
然后,我们需要了解的是,Stack 栈是一个 "先进后出"的原理。
那么基于以上,我们需要记住的是:

  • Stack 栈是一个 "先进后出"的原理
  • Stack 本质是一个List,其具备 List 所有方法

二.Stack 的使用

2.1 初始化
Stack stack=new Stack();

2.2 判断Stack是否为空
isEmpty()

2.3 添加元素
push(E item)

我们知道 Stack 也是一个List,而List的添加是 add(E e),那么Stack的 push 和 add 方法有啥不同呢?
下面先看 源码中Stack 的add方法:

    public synchronized boolean add(E e) {modCount++;ensureCapacityHelper(elementCount + 1);elementData[elementCount++] = e;return true;}

Stack 中push方法的源码:

public E push(E item) {addElement(item);
    <span class="token keyword">return</span> item<span class="token punctuation">;</span>
<span class="token punctuation">}</span>


http://www.taodudu.cc/news/show-4286508.html

相关文章:

  • 【Java---数据结构】栈(Stack)
  • 推荐给后端工程师进阶的几本技术书籍
  • Deep Learning(深度学习) 中文翻译
  • 书籍记录了我技术的成长历程
  • 学习笔记10--CAN总线技术
  • 为什么建议选英文技术书籍
  • 浅谈技术翻译
  • win7系统如何映射服务器,映射网络驱动器在Win7系统中的操作方法
  • win7局域网自建ftp服务器,win7系统搭建FTp服务器局域网内传输文件的解决教程
  • 求助:程序员得了结膜炎+干眼症怎么办?
  • C语言初阶知识点思维导图(超大图片、超级详细版)
  • android 大图分块加载,超大图加载
  • Qt实用技巧:使用Qt加载超大图片的耗时测试
  • 如何显示超大图像
  • 把linux当无线路由器用,基于树莓派的无线路由器改造
  • 路由器OpenWrt如何脱机(离线)下载BT文件
  • 路由器固件编译及个性化
  • 可以运行python的路由器_用python控制你的路由器
  • git不显示贡献度的解决方案
  • Gitlab统计代码的贡献量指标
  • python中秋月饼
  • PAT1020 月饼 分数 25
  • 贪心-月饼
  • Python:1020 月饼
  • 井冈山大学专属中秋月饼
  • C++——m个月饼分给n个人
  • 月饼(Java)
  • PAT乙级——1010.月饼
  • L2-003. 月饼
  • PTA L2-003 月饼

Java中Stack详解相关推荐

  1. Java中CAS详解

    转载自  Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...

  2. Java中LinkedList详解

    Java中LinkedList详解 LinkedList底层是双向链表 单向链表 双向链表 LinkedList新增的方法 主要增加了针对头结点与尾结点进行操作的方法, 即针对第一个元素和最后一个元素 ...

  3. Java中super详解

    目录 Java中super详解 super的作用: 1.     通过super可以访问父类的构造方法 2.   通过super可以访问父类的属性(非私有) 3.        通过super可以访问 ...

  4. java中priorityqueue_详解JAVA中priorityqueue的具体使用

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  5. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  6. java中implement_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...

  7. java中final详解_Java中final用法与详解

    Java中final用法与详解 final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的.这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. f ...

  8. java中getclass_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

  9. java中File详解

    #第六部分:IO流 ##1. File类的作用 File类是Java.io包中唯一代表磁盘我呢见本身的对象.File类定义类一些与平台无关的方法 来操作文件,File类主要用来获取或处理与磁盘文件相关 ...

最新文章

  1. windows 切换 默认 jdk 版本
  2. RTX 3090 AI性能实测:FP32训练速度提升50%,张量核心缩水
  3. JS 给某个DIV增加CLASS样式名
  4. 杭州、互联网、体制化,和中年
  5. 剑指 Offer II 023. 两个链表的第一个重合节点
  6. velocity(vm)模板引擎学习介绍及语法
  7. 浅评-我所用的输入法
  8. WORD中如何进行双行合一
  9. linux 安装php7.3
  10. 空间三点确定圆心坐标及半径
  11. excel取消隐藏_Excel教程:教你两招,批量取消隐藏工作表
  12. 使用SVM和决策树实现客户贷款逾期分析
  13. 学习利用ce修改游戏生命参数
  14. oracle form视频,深入浅出Oracle 之Form开发
  15. IE10、IE11中WebSocket报错:SecurityError
  16. 手机显示器云服务器,不想买台式机,手机加显示器组成云电脑是否可行?
  17. win10 安装yolov7 训练自己的数据集
  18. echarts 坐标自适应,实现 ECharts 图表自适应
  19. 【CV】ViT:用于大规模图像识别的 Transformer
  20. latex backmatter 是什么意思

热门文章

  1. 使用笔记:AWTK中文键盘按键字体加大
  2. python中的list 冒号用法
  3. 第一次git拉取代码到本地及身份验证失败踩坑
  4. 许奔创新社-第21问:如何唤醒创造力?
  5. Python脚本刷网页访问量或关键词搜索频率
  6. 从前有座山,山上有两台计算机
  7. 算法创作|龟兔赛跑问题解决方法
  8. 地铁框架保护的原理_地铁直流系统中框架保护原理及处理程序
  9. 如何使excel实现汉字转拼音及获取大写拼音并保存为常用函数
  10. 技能竞赛国赛_2020高教社杯全国大学生数学建模竞赛常见问题解答