準(zhǔn)備知識
Stack類采用的是動態(tài)數(shù)組棧實現(xiàn)的聚谁,規(guī)則后進(jìn)先出,從棧頂壓入元素茁帽、從棧頂彈出元素董饰。棧實際上是一種添加了后進(jìn)先出規(guī)則的順序表。Stack類是在Vector類的基礎(chǔ)上進(jìn)行繼承并擴展功能倦淀。
http://www.reibang.com/p/532a6e161112
所屬包
package java.util;
繼承與實現(xiàn)關(guān)系
public
class Stack<E> extends Vector<E>
構(gòu)造方法
/**
* 創(chuàng)建一個棧的空構(gòu)造方法
*/
public Stack() {
}
方法
push方法蒋畜,將元素壓入棧
/**
* 將元素item壓入棧中
*/
public E push(E item) {
addElement(item);
return item;
}
public synchronized void addElement(E obj) {
modCount++;
//進(jìn)行擴容操作
/**
* 增加此向量的容量(如有必要),以確保其至少能夠保存最小容量參數(shù)指定的組件數(shù)撞叽。
* 如果當(dāng)前數(shù)組的容量小于minCapacity姻成,那么就增加容量,增加數(shù)組長度
* 新數(shù)組的長度等于原數(shù)組的長度加上增量capacityIncrement愿棋。
* 如果增加capacityIncrement小于等于0科展,那么就自動擴增為原來二倍。
* 如果擴增為原來的二倍還是比minCapacity小糠雨,那么就將minCapacity作為Object數(shù)組的長度才睹。
*/
ensureCapacityHelper(elementCount + 1);
//在棧頂插入元素
elementData[elementCount++] = obj;
}
pop方法,從棧頂彈出元素甘邀,并且在棧中將該元素刪除
/**
* 從棧頂彈出元素
*/
public synchronized E pop() {
E obj;
int len = size();
//獲取棧頂元素琅攘,但是不彈出元素
obj = peek();
//刪除該棧頂元素
removeElementAt(len - 1);
return obj;
}
peek方法,從棧中取出元素值松邪,但是不刪除棧中的值
/**
* 獲取下標(biāo)為數(shù)組長度減一也就是最后的值乎澄,也符合棧的規(guī)則,從棧頂彈出元素
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
public synchronized E elementAt(int index) {
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
}
return elementData(index);
}
//通過索引來獲取數(shù)組中對應(yīng)的值
E elementData(int index) {
return (E) elementData[index];
}
閱讀總結(jié)
(1)Stack動態(tài)棧是線程安全的测摔。
(2)Stack是基于Vector動態(tài)數(shù)組結(jié)構(gòu)實現(xiàn)的,只是控制進(jìn)出元素的方式為后進(jìn)先出的棧方式解恰。
---------------------------該源碼為jdk1.7版本的