java源码解析——Stack类
在java中,Stack类继承了Vector类。Vector类和我们经常使用的ArrayList是类似的,底层也是使用了数组来实现,只不过Vector是线程安全的。因此可以知道Stack也是线程安全的。
Vector为Stack提供了大部分的操作,Stack只需要对添加和取出操作加以限制即可,Stack类的底层源码是非常简单的。
public E push(E item) {
addElement(item);
return item;
}
首先是新增了一个push操作,这个方法并没有用synchronized关键字修饰,这是因为addElement()方法已经是线程安全的了。
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - );
return obj;
}
public synchronized E peek() {
int len = size();
if (len == )
throw new EmptyStackException();
return elementAt(len - );
}
这里新增了栈的pop操作,取出栈顶的元素,并且将其移除。
public boolean empty() {
return size() == ;
}
判断栈是否为空
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= ) {
return size() - i;
}
return -;
}
查找栈中元素
这基本上就是Stack中所有的代码了,这里没有涉及到栈是采用哪种数据结构去实现,因为这些由Vector类实现好了。
java源码解析——Stack类的更多相关文章
- [Java源码解析] -- String类的compareTo(String otherString)方法的源码解析
String类下的compareTo(String otherString)方法的源码解析 一. 前言 近日研究了一下String类的一些方法, 通过查看源码, 对一些常用的方法也有了更透彻的认识, ...
- 【Java源码解析】Thread
简介 线程本质上也是进程.线程机制提供了在同一程序内共享内存地址空间运行的一组线程.对于内核来讲,它就是进程,只是该进程和其他一下进程共享某些资源,比如地址空间.在Java语言里,Thread类封装了 ...
- Java源码解析——集合框架(三)——Vector
Vector源码解析 首先说一下Vector和ArrayList的区别: (1) Vector的所有方法都是有synchronized关键字的,即每一个方法都是同步的,所以在使用起来效率会非常低,但是 ...
- Java源码解析——集合框架(二)——ArrayBlockingQueue
ArrayBlockingQueue源码解析 ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection ...
- [java源码解析]对HashMap源码的分析(二)
上文我们讲了HashMap那骚骚的逻辑结构,这一篇我们来吹吹它的实现思想,也就是算法层面.有兴趣看下或者回顾上一篇HashMap逻辑层面的,可以看下HashMap源码解析(一).使用了哈希表得“拉链法 ...
- java源码解析之Object类
一.Object类概述 Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解 Object的方法可以分成两类,一类是被关键字fin ...
- java源码解析之String类(一)
String是我们接触最多的类,无论是学习中还是工作中,基本每天都会和字符串打交道,从字符串本身的各种拼接.切片.变形,再到和其他基本数据类型的转换,几乎无时无刻都在使用它,今天就让我们揭开Strin ...
- java源码解析之String类(二)
上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并 ...
- lucene原理及源码解析--核心类
马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了. 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人 ...
随机推荐
- ASP.NET实现列表页连接查询 拼接sql语句 绑定grivdView
ASP.NET实现列表页连接查询 拼接sql语句 如图效果: 基本需求:1.当页面第一次加载的时候默认查询一个月时间(或者说是登陆者所属权限的所有数据)的数据绑定到gridView 2.添加查询条件时 ...
- 有关android源码编译的几个问题
项目用到编译环境,与源码有些差异不能照搬,关键是连源码都没编译过,下面基本上是行网上照的各种自学成才的分享,病急乱投医了,都记在下面作为参照吧. 1.验证是否编译正确,在终端执行 emulator & ...
- jacksons转换大小写处理
import com.fasterxml.jackson.databind.ObjectMapper; 1.注意导入的objectMapper包一致 另:jackson的注解大全 https://gi ...
- calltree看代码调用图
calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐 calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...
- BZOJ 4197: [Noi2015]寿司晚宴( dp )
N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个 ...
- leetcode Longest Substring Without Repeating Characters python
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtyp ...
- 创建XML文件
//创建XML文件 XmlDocument xmldoc = new XmlDocument(); XmlText xmltext; ...
- 关于 android Intent 传对象和对象数组的一些操作
直接开正题,Intent传递值就是平常那些很简单的,接下来介绍传递 对象,和 对象数组 1 .intent 传递自定义的 对象 - 实体类继承 Serializable public class A ...
- 电脑硬件扫盲--CPU 显卡
CPU: 主要2个厂商 Inter:core(酷睿) > pentinum(奔腾) > celeron(赛扬) AMD:athlon(速龙) > semporn(闪龙) 主频(GHz ...
- 中国 省会 地级市 经纬度 city array
<?php $city_arr = array ( '北京' => array ( 'gis_lng' => '116.405285', 'gis_lat' => '39.90 ...