1. Stack简介

  Stack是集合中对数据结构栈的一种实现,栈的原则是先进先后出,与队列相反(先进先出)。Stack是继承自Vector的,意味着它也是由数组实现的线程安全的,不考虑线程安全的情况下完全可以用LinkedList当做栈来使用。

2. Stack实现

  Stack的实现很简单,核心参数和方法都继承自Vector,因为它可以调用Vector的全部API。

  Stack实际上也是通过数组去实现的。

  执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

  执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

  执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

public class Stack<E> extends Vector<E> {
private static final long serialVersionUID = 1224463164541339165L;
   //无参构造
   public Stack() {
}
//将元素存入栈顶
public E push(E item) {
     //Vector中实现,将元素追加到数组末端
addElement(item);
return item;
}
//将栈顶的元素取出并从栈顶移除
public synchronized E pop() {
E obj;
     //获取底层数组长度
int len = size();
     //获取数组末端元素
obj = peek();
     //将数组末端元素删除
removeElementAt(len - 1); return obj;
}
   //获取栈顶元素
public synchronized E peek() {
int len = size(); if (len == 0)
throw new EmptyStackException();
     //将数组末端元素返回
return elementAt(len - 1);
}
   //判断栈中元素是否为空
public boolean empty() {
return size() == 0;
}
   //查找元素0在栈中的位置(栈底下标为0开始)
public synchronized int search(Object o) {
     //获取元素索引
int i = lastIndexOf(o); if (i >= 0) {
return size() - i;
}
return -1;
}
}

学习JDK1.8集合源码之--Stack的更多相关文章

  1. 学习JDK1.8集合源码之--LinkedHashSet

    1. LinkedHashSet简介 LinkedHashSet继承自HashSet,故拥有HashSet的全部API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只 ...

  2. 学习JDK1.8集合源码之--ArrayDeque

    1. ArrayDeque简介 ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,Arr ...

  3. 学习JDK1.8集合源码之--Vector

    1. Vector简介 Vector是JDK1.0版本就推出的一个类,和ArrayList一样,继承自AbstractList,实现了List.RandomAccess.Cloneable.java. ...

  4. 学习JDK1.8集合源码之--ArrayList

    参考文档: https://cloud.tencent.com/developer/article/1145014 https://segmentfault.com/a/119000001857894 ...

  5. 学习JDK1.8集合源码之--WeakHashMap

    1. WeakHashMap简介 WeakHashMap继承自AbstractMap,实现了Map接口. 和HashMap一样,WeakHashMap也是一种以key-value键值对的形式进行数据的 ...

  6. 学习JDK1.8集合源码之--HashMap

    1. HashMap简介 HashMap是一种key-value结构存储数据的集合,是map集合的经典哈希实现. HashMap允许存储null键和null值,但null键最多只能有一个(HashSe ...

  7. 学习JDK1.8集合源码之--HashSet

    1. HashSet简介 HashSet是一个不可重复的无序集合,底层由HashMap实现存储,故HashSet是非线程安全的,由于HashSet使用HashMap的Key来存储元素,而HashMap ...

  8. 学习JDK1.8集合源码之--TreeMap

    1. TreeMap简介 TreeMap继承自AbstractMap,实现了NavigableMap.Cloneable.java.io.Serializable接口.所以TreeMap也是一个key ...

  9. 学习JDK1.8集合源码之--LinkedHashMap

    1. LinkedHashMap简介 LinkedHashMap继承自HashMap,实现了Map接口. LinkedHashMap是HashMap的一种有序实现(多态,HashMap的有序态),可以 ...

随机推荐

  1. RocketMQ补偿方案架构设计

    RocketMQ作为消息中间件,在系统异步化架构中,应用非常广泛.但是我们在享用RocketMQ的同时,也不能百分百完全信赖它.一旦RocketMQ崩溃了,给我们业务带来的也将是毁灭性打击. 因此,我 ...

  2. OSG实现利用菲波那契网格(Fibonacci lattice 或 Fibonacci grid)均分球面

    #include<Windows.h> #include<osg/Node> #include<osg/Geode> #include<osg/Group&g ...

  3. Android 开发 Camera2开发_3_处理预览和拍照偏暗问题

    通过调整曝光解决 参考:https://stackoverflow.com/questions/28429071/camera-preview-is-too-dark-in-low-light-and ...

  4. 备份和恢复MySQL数据库

    一.备份 1) 备份表mysqldump -uroot -p 库名 表1 > e:\backup.sqlmysqldump -uroot -p 库名 表1 表2 表3 > e:\backu ...

  5. 自动化运维工具Ansible工具

    目录 一.初识Ansible 二.Ansible的架构 三.Ansible基础使用 安装 主机清单 管理主机 四.Ansible用脚本管理主机 五.Ansible模块Module 六.Ansible常 ...

  6. 【python之路45】tornado的用法 (三)

    参考:https://www.cnblogs.com/sunshuhai/articles/6253815.html 一.cookie用法补充 1.cookie的应用场景 浏览器端保存的键值对,每次访 ...

  7. python3 新特性

    1.格式化字符串f-string user = "Mike" log_message = f'User{user} has logged in' 2.路径管理库Pathlib 3. ...

  8. DP学习之路(1) 01背包

    动态规划是算法中一门很重要的思想,其通过对每一步的假设规划,不停的寻找最优最有利的解决方案,然后一步一步求解出来. 而01背包是其中最基本的一种dp思想,其题目一般为给定一个容量为V的背包,然后有n件 ...

  9. 如何使用JMeter 进行压力测试

    文件转载至:https://jingyan.baidu.com/album/a681b0de5b85db3b184346b9.html?picindex=2 1.打开JMeter, 更改语言为中文,官 ...

  10. 使用poco再次封装redis

    为方便程序对redis操作,我对poco的redis进行了再次封装,主要是针对自己应用需要的部分. 开发工具:netbean 系统环境:centos7 poco版本: poco-1.9.0-all 其 ...