简介
Stack
类表示对象的后进先出(last-in-first-out, LIFO)堆栈。它用五个操作扩展了Vector
类,这些操作允许将Vector
视为堆栈。提供了常用的压入和弹出操作,以及窥视堆栈顶部项的一个方法,测试堆栈是否为空的一个方法,以及用于搜索堆栈中的项并发现它离顶部有多远的一个方法。
当第一次创建堆栈时,它不包含任何项。
Deque
接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先使用这些操作。例如:
Deque<Integer> stack = new ArrayDeque<Integer>();
deque = double-end queue = 双端队列
构造器
创建一个空栈。
public Stack() {
}
常见方法
push 压入
将一个项压入该堆栈顶部。这与addElement(item)
效果完全相同。
public E push(E item) {
addElement(item);
return item;
}
pop 弹出
移除该堆栈顶部的对象,并将该对象作为该函数的值返回。
返回堆栈顶部的对象(Vector
对象的最后一项)。
如果该堆栈是空栈,抛出异常EmptyStackException
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
peek 窥视
查看该堆栈顶部的对象,而不将其从堆栈中移除。
返回堆栈顶部的对象(Vector
对象的最后一项)。
如果该堆栈是空栈,抛出异常EmptyStackException
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
isEmpty 判空
测试此堆栈是否为空。
当且仅当此堆栈不包含任何项时返回true
;否则返回false
。
public boolean empty() {
return size() == 0;
}
search 搜索
返回一个对象在此堆栈上的位置,位置从1开始。如果对象o作为该堆栈中的一个项存在,则此方法返回从堆栈顶部到最接近该堆栈顶部的存在的距离;堆栈中最上面的项被视为距离1。equals方法用于比较o与此堆栈中的项。
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}