Java源代码分析之Stack栈

来源:互联网 发布:网络基础知识视频 编辑:程序博客网 时间:2024/06/05 16:16

Stack 源代码分析

  • 每个Java程序员应该了解的特性

    • LIFO后进先出的特性
    • 在多线程环境下线程安全
  • 类图

类图

可以看到Stack直接继承Vector

类层次图

类层次图可以看到,jdk还啰嗦的为大家添加了一个实现类,StringStack,其实根本没必要的吧,大体看了下,一共只有5个方法,加一个序列号字段,内部实现全部是复用父类的方法,完全可以自己实现的,有点多余啦,另外在继承Vector类中也就Stack了,其他都不常见

下一篇再详细分析Vector源码咯,这篇就不把他的扯出来了。

package java.util;  //此包中所有常用类都需要去分析/** *  后进先出 , 内部实现均由父类 Vector 实现 * *  双向队列 Deque 提供了比较全的方法,比Stack强大,因此推荐使用 Deque *  比如: Deque<Integer> stack = new ArrayDeque<Integer>(); */public class Stack<E> extends Vector<E> {    public Stack() {    }    /**     * 看着没同步实际是同步了的,同步由父类Vector的方法addElement提供实现     * 此方法效果同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);    }    /**     * 当且仅当栈为空的时候返回true     */    public boolean empty() {        return size() == 0;    }    /**     * 返回指定元素离栈顶的距离,注意从1开始计数,如果刚好是栈顶元素,那么返回的值为1,     * 如果不存在此元素,那么返回-1     */    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;}

是不是感觉没啥分析的?我也觉得,真正值得去分析的是Vector类,下一步就是他了。

1 0
原创粉丝点击