综述:
通过上述源码可知,Stack 类继承了 Vector 类(该类实现了List接口)。它的构造方法仅仅包括无参构造,创建一个空栈。
栈结构即先进后出,可以将其看做一个有底的容器,放入元素从底部开始。后来的元素放入已有元素的上方,且完全遮住了已有的元素,只有取走后来的元素,才可以看到早入栈的元素,对早入栈的元素进行操作。
方法介绍:
1、入栈(将元素保存到栈顶)
源码57行,“将新的元素放到栈顶”。参数 item 为待放到栈顶的元素;返回的对象即放入栈顶的元素。
2、出栈(弹出栈顶元素)
可以才看到 pop 方法前有 synchronized 修饰,即此方法为线程同步的方法,一个时刻仅能有一个线程进行出栈操作。首先,获取栈顶元素(peek方法),并保存栈顶元素到对象obj。然后,将栈顶元素从栈中删除(removeElement(len-1))。最后,将栈顶元素放回给调用 pop() 方法的对象。
3、查看栈顶元素
91行说明“查看栈顶的元素,但是不将元素从栈中移出”。首先,判断栈是否为空,若为空则抛出异常。否则,返回栈顶元素。注意,pop 方法调用了该 peek 方法,并在此基础上增加了移出栈顶元素的操作。
4、判断栈是否为空
为空,返回true,否则为false。
5、查找元素在栈中的位置
从栈顶开始查找,返回第一个匹配的元素位置。栈顶元素位置为1(不是0)。若栈中无匹配元素,则返回-1。
6、Stack类中还定义了一个常量(暂时不清楚用途)
7、代码示例:
import java.util.Stack;
public class StackDemo {
public static void main(String[] args) {
Stack<String> stack1= new Stack<String>();
// 入栈
stack1.push("firstItem");
stack1.push("secondItem");
stack1.push("thirdItem");
stack1.push("firstItem");
// 查看元素位置
System.out.println("firstItem location: "+stack1.search("firstItem"));
System.out.println("secondItem location: "+stack1.search("secondItem"));
// 元素出栈
String outItem = stack1.pop();
System.out.println("the pop item is: "+outItem);
System.out.println("firstItem location after pop: "+stack1.search("firstItem"));
// 判断栈是否为空
System.out.println("the static is empty: "+stack1.empty());
// 查看栈顶元素
System.out.println("top element: "+stack1.peek());
}
}
输出结果:
firstItem location: 1
secondItem location: 3
the pop item is: firstItem
firstItem location after pop: 3
the static is empty: false
top element: thirdItem