java源码解析——Stack类

时间:2022-04-16 04:33:50

在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 - ); return obj;
}
public synchronized E peek() {
int len = size(); if (len == )
throw new EmptyStackException();
return elementAt(len - );
}

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

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

判断栈是否为空

public synchronized int search(Object o) {
int i = lastIndexOf(o); if (i >= ) {
return size() - i;
}
return -;
}

查找栈中元素

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