天天看點

java集合系列——List集合之Stack介紹(五)

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

繼續閱讀