java源码解析——Stack类

在java中,Stack类继承了Vector类。Vector类和我们经常使用的ArrayList是类似的,底层也是使用了数组来实现,只不过Vector是线程安全的。因此可以知道Stack也是线程安全的。

Vector为Stack提供了大部分的操作,Stack只需要对添加和取出操作加以限制即可,Stack类的底层源码是非常简单的。

public E push(E item) {
        addElement(item);

        return item;
    }

首先是新增了一个push操作,这个方法并没有用synchronized关键字修饰,这是因为addElement()方法已经是线程安全的了。

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);
    }

这里新增了栈的pop操作,取出栈顶的元素,并且将其移除。

public boolean empty() {
        return size() == 0;
    }

判断栈是否为空

public synchronized int search(Object o) {
        int i = lastIndexOf(o);

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

查找栈中元素

这基本上就是Stack中所有的代码了,这里没有涉及到栈是采用哪种数据结构去实现,因为这些由Vector类实现好了。

原文地址:https://www.cnblogs.com/YESheng/p/3664113.html