JDK之Stack源码解析

15 篇文章 0 订阅
13 篇文章 0 订阅

刚入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方法即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值