1.继承自Vector类
public class Stack<E> extends Vector<E>
- 只有一个默认构造器,用于创建一个空栈
- 堆栈继承了Vector定义的所有方法(不包括私有方法)
- 添加了特属于自己的方法:push pop peek search empty等五个方法
- 底层数据结构是数组
- 是线程安全的
2.常用方法
- push方法:入栈
public E push(E item) {
addElement(item);
return item;
}
没有加同步锁,但是由于其中只包含一个Vector中的同步方法addElement,所以该方法也是线程安全的。
- pop方法:获取栈顶元素,并删除该元素
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
其中size和removeelementAt方法都是同步方法,如果两个线程调用此方法,可能会出现越界异常,需要加同步锁
- peek方法:获取栈顶元素,不删除栈顶元素
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
- search方法:返回对象在堆栈中的位置,指的是从栈顶(数组的尾部)到栈底(数组的头部)方向的位置
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
- empty方法:判断是否为空栈
public boolean empty() {
return size() == 0;
}