在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ Stack
Java 集合細(xì)節(jié)(四):保持 compareTo 和 equals 同步
Iterator
使用序列化實(shí)現(xiàn)對(duì)象的拷貝
fail-fast 機(jī)制
關(guān)鍵字 final
Vector
HashTable
Java 集合細(xì)節(jié)(一):請(qǐng)為集合指定初始容量
強(qiáng)制類型轉(zhuǎn)換
數(shù)組之一:認(rèn)識(shí) 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 定時(shí)任務(wù)
HashSet
字符串
理解 Java 的三大特性之繼承
理解 Java 的三大特性之封裝
代碼塊

Stack

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

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

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

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

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

    public class Stack<E> extends Vector<E>

Stack 的實(shí)現(xiàn)非常簡(jiǎn)單,僅有一個(gè)構(gòu)造方法,五個(gè)實(shí)現(xiàn)方法(從Vector繼承而來(lái)的方法不算與其中),同時(shí)其實(shí)現(xiàn)的源碼非常簡(jiǎ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;
        }