Stack

Stack

一、定义

1
2
public class Stack<E> extends Vector<E> {
}

Stack 继承自 Vector 类,因此拥有 Vector 的所有特性。

二、原理

Stack 除了增加几个栈特用的方法以外,其他的和 Vector 都一样,而增加的这几个方法,内部实际上也是调用的 Vector 的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
}

Vector 的保持一致,Stack 添加的方法也加上了同步锁 synchronized,避免并发问题。

不过 push 方法并没有加上同步锁,这个倒是有点出乎意料,或许是因为它内部调用的方法 addElement 已经加锁的原因吧。

作者

jiaduo

发布于

2021-09-05

更新于

2023-04-03

许可协议