JDK1.8源码解析之 Stack

302 阅读1分钟

前言

  • Stack类表示对象的后进先出(LIFO)堆栈。
  • 它通过五个操作扩展了Vector类,这些操作允许将vector视为堆栈。
  • 提供了通常的 push 和 pop 操作,
  • 以及一种 peek 堆栈顶部元素的方法,
  • 一种用于测试堆栈是否为空的方法 empty 以及一种用于在堆栈中从顶部开始搜索项目并发现其距离的方法 search。
  • stack创建的时候是空的,没有任何元素。

源码

public class Stack<E> extends Vector<E> {
    /**
     * 创建一个stack
     */
    public Stack() {
    }

    /**
     * 入栈 和addElement 方法作用一样。
     */
    public E push(E item) {
        addElement(item);

        return item;
    }

    /**
     * 移除顶部元素,返回顶部元素。
     */
    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);
    }

    /**
     * 判断stack是否为空
     */
    public boolean empty() {
        return size() == 0;
    }

    /**
     * 返回对象在此堆栈上的从1开始的位置。
     * 如果对象o作为该堆栈中的一个项目出现,则此方法返回距堆栈顶部最近的堆栈顶部的距离;
     * 堆栈中最顶层的项目被视为距离为1。equals方法用于将o与该堆栈中的项目进行比较。
     */
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

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

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = 1224463164541339165L;
}