本系列文章所描述的所有類或接口都是基于 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。