Java中Deque与Stack
Posted Panda_Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Deque与Stack相关的知识,希望对你有一定的参考价值。
Java中Deque与Stack
1. Deque
- 允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),简称Deque。
- Java集合提供了接口Deque来实现一个双端队列,它的功能:
①既可以添加到队尾,也可以添加到队首;
②既可以从队首获取,又可以从队尾获取 - Deque接口实际上扩展自Queue:
public interface Deque<E> extends Queue<E> {
...
}
- Deque是一个接口,它的实现类有ArrayDeque和LinkedList。
Deque<String> d2 = new LinkedList<>();
2. Stack
-
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()方法,那样会破坏栈的本质。
3. leetcode98. 验证二叉搜索树
class Solution {
public boolean isValidBST(TreeNode root) {
Deque<TreeNode> stack = new LinkedList<TreeNode>();
double inorder = -Double.MAX_VALUE;
while (!stack.isEmpty() || root != null) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
// 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
if (root.val <= inorder) {
return false;
}
inorder = root.val;
root = root.right;
}
return true;
}
}
以上是关于Java中Deque与Stack的主要内容,如果未能解决你的问题,请参考以下文章
C++初阶----deque(双端队列)+stack queue模拟实现
从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)
为啥要使用 Deque 而不是内置 Stack<>? [复制]