博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
源码分析 (三) Stack 源码分析
阅读量:6723 次
发布时间:2019-06-25

本文共 1156 字,大约阅读时间需要 3 分钟。

简介

栈是数据结构中一种很重要的数据结构类型,因为栈的后进先出功能是实际的开发中有很多的应用场景。Java API中提供了栈(Stack) 的实现。Stack 类继承了 Vector 类,而 Vector 类继承了 AbstractList 抽象类,实现了 List 类,Cloneable 接口,RandomAcces 接口以及 Serializable 接口。

源码阅读

  • 构造函数

    创建一个空的栈

/** * Creates an empty Stack. */public Stack() {}复制代码
  • 入栈
public E push(E item) {    addElement(item);    return item;}复制代码

这里的 addElement( E item) 方法是 Vector 中的方法,点开此方法可以看到 是在检查当前的容量是否满足如果不满足就去开辟一个新的容量。

  • 出栈
public synchronized E pop() {    E       obj;    // 拿到当前栈里面的长度    int     len = size();	// 获取到 len - 1 也就是 Vector 中尾部数据    obj = peek();    // 也是调用 Vector 中 删除元素的函数    removeElementAt(len - 1);    return obj;}复制代码
  • 检查栈里面的数据
/** * Tests if this stack is empty. * * @return  true if and only if this stack contains *          no items; false otherwise. */public boolean empty() {    return size() == 0;}复制代码

主要检查栈里面是否是空数据

  • 查找元素到栈顶的位置
public synchronized int search(Object o) {    //调用父类的方法,根据元素对象获取存在数组中的索引位置    int i = lastIndexOf(o);    if (i >= 0) {        return size() - i;    }    return -1;}复制代码

总结

通过 Stack 的源码可以查看到 它的父类 Vector 底层是一个数组结构,Vector 是 JDK 1.0 的基本上很多方法都是同步线程安全的,在多线程中使用是安全的,但是效率会降低。

转载于:https://juejin.im/post/5c946d525188252d5f0fd9ee

你可能感兴趣的文章
Flipkart: 携手 Android Go 拥抱印度市场
查看>>
【模板】杜教筛(Sum)
查看>>
9月5 号作业管理信息系统
查看>>
a标签中有img有时候会把a撑过大
查看>>
数据库分库分表思路
查看>>
查看 FormData 中已存在的值
查看>>
shell浅谈之三for、while、until循环【转】
查看>>
嵌入式Linux下Camera编程--V4L2【转】
查看>>
算法(Algorithms)第4版 练习 1.3.25 1.3.24
查看>>
(三)Controller接口控制器详解(一)
查看>>
0328复利软件4.0测试
查看>>
git 回滚操作
查看>>
背包问题初探
查看>>
野生前端的数据结构基础练习(4)——字典
查看>>
***UML类图几种关系的总结
查看>>
【BZOJ 1056 1862】排名系统
查看>>
AI入门丨开源学习资源推荐
查看>>
观书有感(摘自12期CSDN)
查看>>
UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(一)
查看>>
shell脚本中的整数测试
查看>>