鍍金池/ 教程/ Java/ Stack
Java 集合細(xì)節(jié)(四):保持 compareTo 和 equals 同步
Iterator
使用序列化實(shí)現(xiàn)對象的拷貝
fail-fast 機(jī)制
關(guān)鍵字 final
Vector
HashTable
Java 集合細(xì)節(jié)(一):請為集合指定初始容量
強(qiáng)制類型轉(zhuǎn)換
數(shù)組之一:認(rèn)識 JAVA 數(shù)組
Java 集合細(xì)節(jié)(三):subList 的缺陷
hashCode
ArrayList
數(shù)組之二
List 總結(jié)
LinkedList
Java 提高篇(九)—–實(shí)現(xiàn)多重繼承
Java 的四舍五入
關(guān)鍵字 static
理解 Java 的三大特性之多態(tài)
抽象類與接口
集合大家族
異常(二)
Java 集合細(xì)節(jié)(二):asList 的缺陷
Map 總結(jié)
TreeSet
equals() 方法總結(jié)
Java 提高篇(十)—–詳解匿名內(nèi)部類
HashMap
Stack
詳解內(nèi)部類
TreeMap
異常(一)
詳解 Java 定時任務(wù)
HashSet
字符串
理解 Java 的三大特性之繼承
理解 Java 的三大特性之封裝
代碼塊

Stack

在 Java 中 Stack 類表示后進(jìn)先出(LIFO)的對象堆棧。棧是一種非常常見的數(shù)據(jù)結(jié)構(gòu),它采用典型的先進(jìn)后出的操作方式完成的。每一個棧都包含一個棧頂,每次出棧是將棧頂?shù)臄?shù)據(jù)取出,如下:

http://wiki.jikexueyuan.com/project/java-enhancement/images/31-1.jpg" alt="fig.1" />

Stack 通過五個操作對 Vector 進(jìn)行擴(kuò)展,允許將向量視為堆棧。這個五個操作如下:

操作 說明
empty() 測試堆棧是否為空。
peek() 查看堆棧頂部的對象,但不從堆棧中移除它。
pop() 移除堆棧頂部的對象,并作為此函數(shù)的值返回該對象。
push(E item) 把項(xiàng)壓入堆棧頂部。
search(Object o) 返回對象在堆棧中的位置,以 1 為基數(shù)。

Stack 繼承 Vector,他對 Vector 進(jìn)行了簡單的擴(kuò)展:

    public class Stack<E> extends Vector<E>

Stack 的實(shí)現(xiàn)非常簡單,僅有一個構(gòu)造方法,五個實(shí)現(xiàn)方法(從Vector繼承而來的方法不算與其中),同時其實(shí)現(xiàn)的源碼非常簡單


    /**
         * 構(gòu)造函數(shù)
         */
        public Stack() {
        }

        /**
         *  push函數(shù):將元素存入棧頂
         */
        public E push(E item) {
            // 將元素存入棧頂。
            // addElement()的實(shí)現(xiàn)在Vector.java中
            addElement(item);

            return item;
        }

        /**
         * pop函數(shù):返回棧頂元素,并將其從棧中刪除
         */
        public synchronized E pop() {
            E    obj;
            int    len = size();

            obj = peek();
            // 刪除棧頂元素,removeElementAt()的實(shí)現(xiàn)在Vector.java中
            removeElementAt(len - 1);

            return obj;
        }

        /**
         * peek函數(shù):返回棧頂元素,不執(zhí)行刪除操作
         */
        public synchronized E peek() {
            int    len = size();

            if (len == 0)
                throw new EmptyStackException();
            // 返回棧頂元素,elementAt()具體實(shí)現(xiàn)在Vector.java中
            return elementAt(len - 1);
        }

        /**
         * 棧是否為空
         */
        public boolean empty() {
            return size() == 0;
        }

        /**
         *  查找“元素o”在棧中的位置:由棧底向棧頂方向數(shù)
         */
        public synchronized int search(Object o) {
            // 獲取元素索引,elementAt()具體實(shí)現(xiàn)在Vector.java中
            int i = lastIndexOf(o);

            if (i >= 0) {
                return size() - i;
            }
            return -1;
        }