數據結構(八)——棧 in Java8

源碼

package java.util;

/**
 * 棧是一個先進後出的數據結構,它繼承於Vector,那表明它是線程安全的。
 * @since   JDK1.0
 */
public
class Stack<E> extends Vector<E> {
    /**
     * 創建空棧的構造方法
     */
    public Stack() {
    }

    /**
     * 想棧頂添加新元素
     */
    public E push(E item) {
        addElement(item);

        return item;
    }

    /**
     * 移除棧頂元素,若棧爲空,拋出 EmptyStackException
     */
    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);
    }

    /**
     * 測試其是否爲空
     */
    public boolean empty() {
        return size() == 0;
    }

    /**
     * 從棧中尋找元素,返回元素距棧頂的位置,棧頂元素爲1,如果找不到,返回-1
     */
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

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

    /** 序列號,傳輸所用,不多解釋 */
    private static final long serialVersionUID = 1224463164541339165L;
}

相關類

在這裏插入圖片描述

擴展

一種更完善的LIFO方式是使用雙端隊列Deque,如下:

Deque<Integer> stack = new ArrayDeque<Integer>();

Deque相關類

在這裏插入圖片描述

Deque方法

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章