开篇
Stack是List的实现类当中最简单的,用一句话形容Stack那就是Stack在Vector的基础上采用Vector的特性来达到Stack的目标。
Stack是一种后进先出的数据结构类型(数组)(last in frist out);实现了Vector;在Vector的基础添加了五个方法:
- push(E item) 把项压入堆栈顶部。
- pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
- peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
- boolean empty() 测试堆栈是否为空。
- int search(Object o)#返回对象在堆栈中的位置,以 1 为基数。
Stack类图
Stack类图Stack源码分析
Stack的源码非常简单,就是在Vector提供的接口基础上作了一层封装。
- push操作直接调用Vector的addElement()方法在尾部添加元素
- pop操作直接调用Vector的removeElementAt()方法移除尾部的元素
- Stack的操作全部是线程安全,使用synchronized变量进行修饰
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;
}
}
网友评论