本系列文章所描述的所有类或接口都是基于 JDK 1.7的源码,在其它 JDK 的实现方式中可能会有所不同。
一、实现方式
Stack 继承于 Vector,在此基础上实现了 Stack 所要求的后进先出(LIFO)的弹出及压入操作,其提供了 push、pop、peek三个主要的方法。
二、push(E)
push 操作通过调用 Vector 中的 addElement 来完成。
public E push(E item) {
addElement(item);
return item;
}
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
三、pop()
pop 操作通过调用 peek 来获取元素,并同时删除数组的最后一个元素。
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()
peek 操作通过获取当前 Object 数组的大小,并获取数组上的最后一个元素。
五、注意要点
对于 Stack 而言,要注意的只有一点:
Stack 基于 Vector 实现,支持 LIFO。