繼承關(guān)系
public class Stack<E> extends Vector<E>
從繼承關(guān)系來看狠持,就知道Stack的數(shù)據(jù)結(jié)構(gòu)也是數(shù)組
成員變量
Stack本身沒有成員變量鼓鲁,不過它繼承了Vector的成員變量
關(guān)鍵方法
1.構(gòu)造方法
//空的構(gòu)造方法
public Stack() {
}
子類構(gòu)造函數(shù)默認(rèn)會(隱式)調(diào)用父類的無參構(gòu)造函數(shù)畸裳,它的父類是的參數(shù)構(gòu)造函數(shù)迎献,會創(chuàng)建一個容量為10的數(shù)組
2.其他方法
//入棧
public E push(E item) {
addElement(item);
return item;
}
調(diào)用vector的addElement方法改备,在數(shù)組尾部添加一個元素
//出棧
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);
}
每次都從數(shù)組尾部取出元素婴梧,peek只會取出末尾的元素穗椅,而pop會刪除末尾的元素
//獲取指定元素在棧的位置辨绊,棧頂元素的位置為1
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
總結(jié)
Stack的代碼很少,方法也就這么多房待,它的大部分都是調(diào)用的Vector的方法
Stack只是在Vector的基礎(chǔ)上添加了入棧和出棧的操作邢羔,模擬了一下棧的先進(jìn)后出的特點
Stack是線程安全的動態(tài)的可擴容的數(shù)組