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
}