JDK之Stack源码解析

刚入java不久的程序猿,对于简单的使用已毫不满足,最终为了一探究竟,翻开了JDK的源码,以下观点为自己的理解及看了多篇博客的总结,欢迎各位大神指出不对的地方,当然也欢迎和我一样刚学的同学,一起加油努力吧~~

Stack源码解析

Stack,栈,我想大家应该都不陌生,尤其经常会遇到的StackOverFlow,栈溢出异常,源码里是这么介绍栈的,后进先出(LIFO),什么叫后进先出呢,举个例子,可能有些不恰当,能理解就行,比如有一个圆形的罐子,你往罐子里放饼干,一块一块的往里放,最终罐子会装满,先放进去的饼干会在罐子最底下,但是当我们想拿饼干吃的时候,都是从最上面一块一块拿,后放进去的却先拿出来了。相信大家多少有点了解这个概念了,下面直接看源码,Stack的源码比较少,就直接列出来了

public
class Stack<E> extends Vector<E> {
    /**
     * 空的构造,创建一个Stack
     */
    public Stack() {
    }

    /**
     * 将元素放入栈中,调用了Vector的方法
     */
    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);
    }

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

    /**
     * 查看某个元素是否在栈中存在
     */
    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

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

    /** 版本号 */
    private static final long serialVersionUID = 1224463164541339165L;
}

上面的源码大致标注了下,都比较简单,Stack结构也比较明了,继承了Vector,源码么,大致看下理解下就行,主要还是栈后进先出需要记得,大致了解下pop与peek方法即可

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