1.Stack的簡介
Stack 類表示後進先出(LIFO)的對象堆棧。它通過五個操作對類 Vector 進行了擴充 ,允許将向量視為堆棧。它提供了通常的 push 和 pop 操作,以及取堆棧頂點的 peek 方法、測試堆棧是否為空的 empty 方法、在堆棧中查找項并确定到堆棧頂距離的 search 方法。
因為它繼承自Vector,那麼它的實作原理是以數組實作堆棧的。如果要以連結清單方式實作堆棧可以使用LinkedList!
2.Stack的繼承關系
java.lang.Object
繼承者 java.util.AbstractCollection<E>
繼承者 java.util.AbstractList<E>
繼承者 java.util.Vector<E>
繼承者 java.util.Stack<E>
所有已實作的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
并且從類 java.util.Vector 繼承的字段
從類 java.util.AbstractList 繼承的字段
modCount
3.Stack的API
Stack API
Stack隻有下面四個方法!由于Stack繼承了Vector ,它也有Vector的API方法!
boolean empty()
測試堆棧是否為空。
E peek()
檢視堆棧頂部的對象,但不從堆棧中移除它。
E pop()
移除堆棧頂部的對象,并作為此函數的值傳回該對象。
E push(E item)
把項壓入堆棧頂部。
int search(Object o)
傳回對象在堆棧中的位置,以 1 為基數。
4.源碼
public
class Stack<E> extends Vector<E> {
/**
* 建立一個空堆棧。
*/
public Stack() {
}
/**
* 把項壓入堆棧頂部。其作用與下面的方法完全相同:
*
* item - 壓入堆棧的項。
*
* @return 傳回 item 參數。
*/
public E push(E item) {
addElement(item);//是Vector中的方法,詳細實作請檢視Vector的源碼
return item;
}
/**
* 移除堆棧頂部的對象,并作為此函數的值傳回該對象。
*
* @return 堆棧頂部的對象( Vector 對象中的最後一項)。
* @throws EmptyStackException if this stack is empty.
*/
public synchronized E pop() {//注意此方法是 synchronized修飾的,同步方法
E obj;
int len = size();
obj = peek();
removeElementAt(len - );//是Vector中的方法,詳細實作請檢視Vector的源碼
return obj;
}
/**
* 檢視堆棧頂部的對象,但不從堆棧中移除它。
*
*/
public synchronized E peek() {
int len = size();
if (len == )
throw new EmptyStackException();
return elementAt(len - );
}
/**
* Tests if this stack is empty.
*
* 測試堆棧是否為空。 為空傳回 true
*/
public boolean empty() {
return size() == ;
}
/**
* 傳回對象在堆棧中的位置,以 1 為基數。如果對象 o是堆棧中的一個項,
* 此方法傳回距堆棧頂部最近的出現位置到堆棧頂部的距離;
* 堆棧中最頂部項的距離為 1。使用 equals 方法比較 o 與堆棧中的項。
*
* @param o the desired object. o - 目标對象。
* @return the 1-based position from the top of the stack where
* the object is located; the return value <code>-1</code>
* indicates that the object is not on the stack.
* 傳回 : 對象到堆棧頂部的位置,以 1 為基數;傳回值 -1 表示此對象不在堆棧中。
*/
public synchronized int search(Object o) {//注意此方法為 synchronized
int i = lastIndexOf(o);
if (i >= ) {
return size() - i;
}
return -;
}
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = L;
}
5.總結
(1) Stack實際上也是通過數組去實作的。實際調用的實作方法都是Vector中的方法!
- push時(即,将元素推入棧中),是通過将元素追加的數組的末尾中。
- peek時(即,取出棧頂元素,不執行删除),是傳回數組末尾的元素。
- pop時(即,取出棧頂元素,并将該元素從棧中删除),是取出數組末尾的元素,然後将該元素從數組中删除。
(2) Stack繼承于Vector,Stack擁有着Vector的屬性和功能!
java集合系列——java集合概述(一)
java集合系列——List集合之ArrayList介紹(二)
java集合系列——List集合之LinkedList介紹(三)
java集合系列——List集合之Vector介紹(四)
java集合系列——List集合之Stack介紹(五)
java集合系列——List集合總結(六)
java集合系列——Map介紹(七)
java集合系列——Map之HashMap介紹(八)
java集合系列——Map之TreeMap介紹(九)
java集合系列——Set之HashSet和TreeSet介紹(十)
如果帥氣(美麗)、睿智(聰穎),和我一樣簡單善良的你看到本篇博文中存在問題,請指出,我虛心接受你讓我成長的批評,謝謝閱讀!
祝你今天開心愉快!
歡迎通路我的csdn部落格,我們一同成長!
“不管做什麼,隻要堅持下去就會看到不一樣!在路上,不卑不亢!”
部落格首頁:http://blog.csdn.net/u010648555