Java中Stack详解
前言
开发过程中经常会用到集合,在不用思考的情况下,集合我们肯定是用ArrayList,HashMap,特别点的时候会用到 HashSet。但是,这几个集合类真的是万能的么?针对不同的开发场景,我们需要怎样选择正确的集合呢?那么,这节我们就将一个特别的集合----- Stack,它有一个响亮并且我们不陌生的名字:栈!
今天涉及的知识有:
- Stack 原理
- Stack 的使用
- Stack 和 ArrayList 的区别
- 使用示例及结果
一.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{
这里,我们知道了两点:
- Vector 是 AbstractList 子类
- 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详解相关推荐
- Java中CAS详解
转载自 Java中CAS详解 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换 ...
- Java中LinkedList详解
Java中LinkedList详解 LinkedList底层是双向链表 单向链表 双向链表 LinkedList新增的方法 主要增加了针对头结点与尾结点进行操作的方法, 即针对第一个元素和最后一个元素 ...
- Java中super详解
目录 Java中super详解 super的作用: 1. 通过super可以访问父类的构造方法 2. 通过super可以访问父类的属性(非私有) 3. 通过super可以访问 ...
- java中priorityqueue_详解JAVA中priorityqueue的具体使用
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...
- java中匿名内部类详解_java 中匿名内部类的实例详解
搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...
- java中implement_详解JAVA中implement和extends的区别
详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实 ...
- java中final详解_Java中final用法与详解
Java中final用法与详解 final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的.这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. f ...
- java中getclass_详解java中this.getClass()和super.getClass()的实例
详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...
- java中File详解
#第六部分:IO流 ##1. File类的作用 File类是Java.io包中唯一代表磁盘我呢见本身的对象.File类定义类一些与平台无关的方法 来操作文件,File类主要用来获取或处理与磁盘文件相关 ...
最新文章
- windows 切换 默认 jdk 版本
- RTX 3090 AI性能实测:FP32训练速度提升50%,张量核心缩水
- JS 给某个DIV增加CLASS样式名
- 杭州、互联网、体制化,和中年
- 剑指 Offer II 023. 两个链表的第一个重合节点
- velocity(vm)模板引擎学习介绍及语法
- 浅评-我所用的输入法
- WORD中如何进行双行合一
- linux 安装php7.3
- 空间三点确定圆心坐标及半径
- excel取消隐藏_Excel教程:教你两招,批量取消隐藏工作表
- 使用SVM和决策树实现客户贷款逾期分析
- 学习利用ce修改游戏生命参数
- oracle form视频,深入浅出Oracle 之Form开发
- IE10、IE11中WebSocket报错:SecurityError
- 手机显示器云服务器,不想买台式机,手机加显示器组成云电脑是否可行?
- win10 安装yolov7 训练自己的数据集
- echarts 坐标自适应,实现 ECharts 图表自适应
- 【CV】ViT:用于大规模图像识别的 Transformer
- latex backmatter 是什么意思