java解析java源码_JAVA语言-Java源码解析-Stack源码分析

一、简介

2c335896c0f89dcba3876a8516d761b5.png

stack类图.png

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

二、源码阅读

1.构造方法public Stack() {

}

创建一个空栈。

2.入栈pushpublic E push(E item) {

addElement(item);

return item;

}

public synchronized void addElement(E obj) {

modCount++;

ensureCapacityHelper(elementCount + 1);

elementData[elementCount++] = obj;

}

入栈是一个同步的方法,调用Vector的addElement方法,也是一个同步方法,先将修改次数加一,之后调用ensureCapacityHelper确认数组有足够的空间能够容纳新的元素。最后将元素新增到数组,即Vector的末尾。

3.出栈poppublic synchronized E pop() {

E       obj;

int     len = size();

obj = peek();

removeElementAt(len - 1);

return obj;

}

出栈同样是一个同步方法,先定义一个泛型对象obj,获取到数组长度len,然后调用peek()方法,获取栈顶的元素赋值给obj,然后删除栈顶元素。public synchronized E peek() {

int     len = size();

if (len == 0)

throw new EmptyStackException();

return elementAt(len - 1);

}

很显然,peek()方法直接调用了Vector的elementAt方法,该方法不删除栈顶的元素。

4.判断栈是否为空/**

* 通过数组长度判断栈是否为空。

*

* @return  true if and only if this stack contains

*          no items; false otherwise.

*/public boolean empty() {

return size() == 0;

}

5.查询元素到栈顶的距离/**

* Returns the 1-based position where an object is on this stack.

* If the object o occurs as an item in this stack, this

* method returns the distance from the top of the stack of the

* occurrence nearest the top of the stack; the topmost item on the

* stack is considered to be at distance 1. The equals * method is used to compare o to the

* items in this stack.

*

* @param   o   the desired object.

* @return  the 1-based position from the top of the stack where

*          the object is located; the return value -1 *          indicates that the object is not on the stack.

*/public synchronized int search(Object o) {

int i = lastIndexOf(o);

if (i >= 0) {

return size() - i;

}

return -1;

}

一个同步方法,找到指定元素o到栈顶的距离,可以看到用到了lastIndexOf方法,如果找不到元素,则返回-1。

三、总计

通过源码我们可以看到Vector底层是一个数组,说明Stack的实现是通过数组来实现的,然后通过对数组的操作来模仿栈的各种功能。而且在源码中Vector的很多方法都是synchronized 的,也就是说是线程安全,所以说在多线程中是可以安全使用的,不过这样效率上肯定是会降低的。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言JAVA频道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试神器CS(4.0)的使用

CS CS简介CS功能安装CSCS的基本使用深入标题介绍 Beacon Commands基础操作演示 CS简介 CS 是Cobalt Strike的简称,是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端&…

UTF-8和GBK有啥区别?

粉丝求助: 如何解决: 把编辑器和浏览器的字符集统一设置成utf-8或者gbk即可。 主要区别: 1.GBK是在bai国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不du是国家标准)。zhiGBK编码dao专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。 2. UTF-8 编码是…

Java反射(Reflection)

基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的。 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射&…

超详细的MySQL三万字总结

文章目录 MySQL基础数据库的介绍数据库概述数据的存储方式数据库的概念常见数据库排行榜 数据库的安装与卸载数据库的安装数据库的卸载 数据库服务的启动与登录Windows 服务方式启动DOS 命令方式启动控制台连接数据库SQLyog 图形化工具——客户端使用 SQLyog 登录数据库数据库…

你要的能做出炫酷图表的网站来啦

不需要多高深的技术,也不需要多长时间,分分钟让小白都能做出超好看的图表~ 1.DataV DataV 是阿里云出品的在线可视化工具,可以将超多数据,放在一块大屏上 2.网易有数 网易有数的特点是,编辑页面自由度非常高&#x…

求有向图中两点最短距离java_算法题解:求有向图中的最短路径(JAVA+DFS算法实现)...

求有向图中的最短路径(JAVADFS算法实现)问题描述给定一个有向图,如下图所示,求从1号顶点到5号顶点的最短路径。输入数据格式为第一行输入顶点数和边数,从第二行开始每一行输入3个整数,分别代表连接顶点的边和权重。例如&#xff1…

Postman使用详解

一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网…

postman插件下载安装教程(详细)

一、前言 postman是一款强大网页接口调试工具,我们在平时开发过程中经常会使用到,一般使用最多的是postman的客户端,实际上postman在谷歌浏览器上也提供了插件,可以不必要安装客户端进行接口测试工作。 建议更新到最新谷歌浏览器&…

SharePoint 2013 workflow cannot start automatically when you logged in site as a system account

I have created one simple workflow on custom list using SharePoint designer 2013.While designing workflow, I have unchecked the “Allow this workflow to be manually started” and select rest two options like “Start workflow automatically when an item is c…

哥斯拉Godzilla shell管理工具

各大厂商的waf不断,在静态查杀、流量通信等方面对webshell进行拦截,众红队急需一款优秀的权限管理工具,冰蝎3.0的发布可能缓解了流量加密的困境,但是冰蝎3.0的bug众多,很多朋友甚至连不上冰蝎的shell, 于是…

git信息泄露漏洞

git信息泄露漏洞 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。 危害 攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据…

功能项目拼图将Java 9引入

因此,拼图项目...我们已经对此颇为了解,但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点,并介绍项目的核心概念和功能。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序(不同于发布顺序…

2021Kali -- 木马免杀制作

​知道为什么梦里的人都看不清脸么?因为怕你当真。。。 ---- 网易云热评 一、通过MSF生成shellcode 1、启动MSF,演示版本是6.0.36 2、通过msfvenom生成相关代码 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b \x00 l…

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库,而YOLO(You Only Look Once)是一个流行的实时对象检测系统。对于大学生和初学者而言,掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…

目录爆破工具 -- dirsearch

我记得,以前总会和你聊的很晚很晚,现在我们不再说话了,我还是会熬夜,但我想,不如从今天开始早点睡吧。。。 一、环境:Kali2020.01、Python3.0 二、安装过程: 1、复制dirsearch到本地安装包 gi…

java coin介绍_代码示例中的Java 7:Project Coin

java coin介绍该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述。 Project Coin的目标是向JDK 7添加一组小的语言更改。这些更改确实简化了Java语言语法。 更少的打字,更简洁的代码,愉悦的开发人员&#…

在Java中实现过滤器和面包店锁

为了了解锁的工作方式,实现自定义锁是一个好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁(自旋锁),并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法,面包房锁…

Burpsuite工具的证书安装

Burpsuite工具的证书安装 Bursuite作为一款可以用来挖掘各种各样的WEB安全漏洞工具,在web安全渗透方面经常会使用到,可以用Bursuite进行对数据的抓包,其不安装证书时只能抓取http的包,安装证书就可以抓取https包,并分析…

物资申请php,php学生捐赠物品管理系统

捐赠物品管理系统采用php编程语言开发,mysql作为后台数据库支持,运行在wamp,appserv等集成环境上.为了方便学生捐赠物品,让更多的贫困人民得到更多的帮助,开发一套校园物品捐赠系统是十分必要的。而且可以培养学生的社会责任感,让他们更加富有…

哥斯拉Webshell

一.启动 命令:java -jar Godzilla-V2.96.jar 启动时同目录会生成data.db数据库存放数据 启动成功界面如下 二.使用(在本机实测) 这里演示jsp文件进行连接(需要提前配置好jsp环境) 1.点击管…