Java集合(3)Stack源碼解析

Java集合源碼解析系列博客

轉載請標明出處:
https://blog.csdn.net/u011035026/article/details/88060973

1、Stack簡介?

  1. Stack是一個後進先出(last in first out,LIFO)的堆棧。
  2. 在Vector類的基礎上擴展5個方法而來。

2、源碼解析

/**
 * Stack源碼解析
 *
 * @param <E>
 */
public class Stack<E> extends Vector<E> {

    /**
     * * 序列化唯一表示UID
     */
    private static final long serialVersionUID = 1224463164541339165L;

    /**
     * 無參構造函數
     * 創建一個空的棧
     */
    public Stack() {
    }

    /**
     * 將一個元素添加到棧頂,線程安全
     *
     * @param item 元素
     * @return
     */
    public E push(E item) {
        addElement(item);
        return item;
    }

    /**
     * 移除棧頂的元素,並且返回該元素,線程安全
     *
     * @return 返回將要移除棧頂的元素
     */
    public synchronized E pop() {
        E obj;
        int len = size();

        obj = peek();
        removeElementAt(len - 1);

        return obj;
    }

    /**
     * 查看棧頂的元素,但是不把其移除棧頂,線程安全
     *
     * @return 返回查看的棧頂元素
     */
    public synchronized E peek() {
        int len = size();

        if (len == 0)
            throw new EmptyStackException();
        return elementAt(len - 1);
    }

    /**
     * 判斷當前棧是否爲空
     *
     * @return true代表爲空,false代表不爲空
     */
    public boolean empty() {
        return size() == 0;
    }

    /**
     * 獲取當前元素在棧中的索引座標,線程安全
     *
     * @param o 將查找的元素
     * @return 返回-1則代表該棧中不包含當前元素,否則返回其對應的索引位置
     */
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

        if (i >= 0) {
            return size() - i;
        }
        return -1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章