Stack
约 386 字大约 1 分钟
2024-08-08
栈(Stack)是一种后进先出(LIFO:Last In First Out)的数据结构
Stack 只有入栈和出栈的操作
把元素压栈:
push(E)把栈顶的元素“弹出”:
pop(E)取栈顶元素但不弹出:
peek(E)
在 Java 中,我们用 Deque 可以实现 Stack 的功能
把元素压栈:
push(E)/addFirst(E)把栈顶的元素"弹出":
pop(E)/removeFirst()取栈顶元素但不弹出:
peek(E)/peekFirst()
为什么 Java 的集合类没有单独的 Stack 接口呢?
因为有个遗留类名字就叫 Stack,出于兼容性考虑,所以没办法创建 Stack 接口,只能用 Deque 接口来"模拟"一个 Stack 了
使用注意
当我们把 Deque 作为 Stack 使用时,注意只调用 push()/pop()/peek() 方法,不要调用 addFirst()/removeFirst()/peekFirst() 方法,这样代码更加清晰
Stack 的作用
Stack 在计算机中使用非常广泛,JVM 在处理 Java 方法调用的时候就会通过栈这种数据结构维护方法调用的层次
JVM 会创建方法调用栈,每调用一个方法时,先将参数压栈,然后执行对应的方法;当方法返回时,返回值压栈,调用方法通过出栈操作获得方法返回值
因为方法调用栈有容量限制,嵌套调用过多会造成栈溢出,即引发 StackOverflowError
栗子
public static void main(String[] args) {
Deque<String> deque = new LinkedList<>();
deque.push("A");
deque.push("B");
System.out.println(deque.peek()); // B
System.out.println(deque.pop()); // B
}