java Stack源码解析
Posted StubbornAnt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Stack源码解析相关的知识,希望对你有一定的参考价值。
本源码解析基于JDK1.7
概要
- Stack是基于Vector实现的first-in-last-out数据结构
- Stack用同步来实现了线程安全,因此在单线程情况下该类会由于加锁开销而效率低
- Stack在Vector的基础上增加了五个方法
- push 入栈
- pop 出栈
- peek 取栈顶元素
- empty 判断栈空
- search 返回某个元素距离栈顶的距离
- JDK提供了更为完善的栈的实现,接口Deque及其实现ArrayDeque,其使用方法
Deque<Integer> stack = new ArrayDeque<Integer>()
源码解析
- 以下为全部源码,其在Vector的基础上,对栈数据结构进行了适配
- Stack实现方法比较简陋,只提供了默认的构造函数,Deque接口方法比较丰富,其实现类ArrayDeque
- 由于同步使得元素只能串行使用,效率较低,如果想要使得Deque同步通过
Deque<Integer> queue = new ArrayDeque<Integer>(); Collections.synchronizedCollection(queue);
,来实现同步 - 其改变栈结构的方法都是同步的,或者调用的Vector的同步的方法
public class Stack<E> extends Vector<E>
public Stack()
public E push(E item)
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;
public synchronized int search(Object o)
int i = lastIndexOf(o);
if (i >= 0)
return size() - i;
return -1;
private static final long serialVersionUID = 1224463164541339165L;
以上是关于java Stack源码解析的主要内容,如果未能解决你的问题,请参考以下文章
Java 集合系列07之 Stack详细介绍(源码解析)和使用示例