一、Stack简介
在Java中,Stack是一个类而非接口,下面是Stack的类关系图。
Stack继承自Vector,所以是提供了入栈和出栈等基本操作。
二、Stack的实现原理
1、底层数据结构
Stack是基于Vector来实现,底层使用的是数组,当数组容量不够时进行扩容。
2、入栈——push(E e)
public E push(E item) {
addElement(item);
return item;
}
可以看出,入栈操作是直接通过Vector的addElement()方法将元素添加到数组尾部,然后添加的元素。
3、出栈——pop()
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);
}
出栈操作是先通过peek()方法查看数组中的最后一个元素,然后调用Vector的removeElementAt()方法移除最后一个元素。而且整个方法是使用synchronized进行同步控制的,所以Stack的线程安全的。