一、简介
Stack<E>类在Java.util包下,作为一种后进先出(LIFO)的数据结构,是一种比较简单好用的数据结构。
JVM的栈空间结构,以及方法调用的时候如何在栈中进行入栈、出栈都使得我们需要去了解栈是什么样的,以及如何简单地使用它。如图:
栈结构就像是一个竖形容器一样,入栈的时候从栈顶向下压入栈帧,出栈的时候也是从栈顶移除数据。
二、代码示例
Stack类扩展了Vector,而Vector在代码实现的时候采用了很多synchronized同步锁来控制并发问题,两者都是线程安全的。
Stack主要扩展了五个方法:
1)push:压入栈
2)pop:从栈顶移除,如果栈为空,抛出异常
3)empty:判断栈是否为空
4)peek:查看栈顶的元素,如果栈为空,那么抛出异常
5)search:搜索指定元素,如果搜索不到返回-1,否则返回1
import java.util.Stack; public class StackDemo { public static void main(String[] args) { Stack<String> taskStack = new Stack<>(); // push taskStack.push("stackFrame1"); taskStack.push("stackFrame2"); taskStack.push("stackFrame3"); taskStack.push("stackFrame4"); System.out.println(taskStack); // pop taskStack.pop(); taskStack.pop(); taskStack.pop(); System.out.println(taskStack); taskStack.pop(); // 如果为空,pop()方法会抛出异常 if (!taskStack.empty()) { taskStack.pop(); } else { System.out.println("stack empty"); } // push taskStack.push("stackFrame5"); // peek System.out.println(taskStack.peek()); // search System.out.println(taskStack.search("stackFrame5")); System.out.println(taskStack.search("stackFrame6")); } }