Stack遵循LIFO,Queue遵循FIFO;Java中推荐用ArrayDeque实现Stack,Queue常用LinkedList、ArrayDeque、PriorityQueue等,适用于表达式求值、BFS、任务调度等场景。

在Java中,
Stack
Queue
Stack
Queue
要在Java中使用
Stack
Queue
使用Stack
java.util.Stack
Vector
立即学习“Java免费学习笔记(深入)”;
push(E item)
pop()
EmptyStackException
peek()
EmptyStackException
empty()
search(Object o)
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<String> browserHistory = new Stack<>();
// 访问页面
browserHistory.push("google.com");
browserHistory.push("baidu.com");
browserHistory.push("github.com");
System.out.println("当前页面: " + browserHistory.peek()); // github.com
// 后退
String lastVisited = browserHistory.pop();
System.out.println("后退到: " + browserHistory.peek()); // baidu.com
// 再次访问新页面
browserHistory.push("stackoverflow.com");
System.out.println("当前页面: " + browserHistory.peek()); // stackoverflow.com
System.out.println("栈是否为空: " + browserHistory.empty()); // false
}
}使用Queue
java.util.Queue
LinkedList
ArrayDeque
Queue
null
false
add(E e)
remove()
element()
offer(E e)
true
false
poll()
null
peek()
null
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<String> taskQueue = new LinkedList<>(); // LinkedList是Queue的一个常用实现
// 添加任务
taskQueue.offer("任务A");
taskQueue.offer("任务B");
taskQueue.offer("任务C");
System.out.println("队列头部任务: " + taskQueue.peek()); // 任务A
// 处理任务
String currentTask = taskQueue.poll();
System.out.println("正在处理: " + currentTask); // 任务A
System.out.println("下一个任务: " + taskQueue.peek()); // 任务B
// 继续处理
taskQueue.poll();
taskQueue.poll();
System.out.println("队列是否为空: " + taskQueue.isEmpty()); // true
System.out.println("尝试获取空队列头部: " + taskQueue.poll()); // null
}
}Stack
Deque
这是个老生常谈但又很重要的问题。当我刚开始学习Java的时候,
Stack
java.util.Stack
主要原因在于:
Stack
Vector
Stack
Vector
get(int index)
所以,更推荐的做法是使用
java.util.Deque
Deque
push(E e)
Stack
push()
pop()
Stack
pop()
peek()
Stack
peek()
ArrayDeque
LinkedList
Deque
ArrayDeque
LinkedList
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeAsStackExample {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>(); // 使用ArrayDeque作为栈
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("栈顶元素: " + stack.peek()); // 30
System.out.println("弹出元素: " + stack.pop()); // 30
System.out.println("新的栈顶元素: " + stack.peek()); // 20
// 尝试使用LinkedList作为栈
Deque<String> stringStack = new LinkedList<>();
stringStack.push("A");
stringStack.push("B");
System.out.println("String栈顶: " + stringStack.peek()); // B
}
}总而言之,如果你需要一个栈,请优先考虑使用
Deque
ArrayDeque
Queue
Queue
Queue
LinkedList
offer
poll
Deque
LinkedList
ArrayDeque
LinkedList
Stack
Deque
ArrayDeque
LinkedList
PriorityQueue
Comparator
poll()
PriorityQueue
ConcurrentLinkedQueue
java.util.concurrent
ConcurrentLinkedQueue
synchronized
ConcurrentLinkedQueue
选择哪种实现,关键在于你的具体需求:是需要高性能的单线程操作?还是需要线程安全的并发操作?亦或是需要基于优先级的处理?明确这些,选择自然就清晰了。
Stack
Queue
在实际的软件开发中,
Stack
Queue
Stack
()
{}[]
Queue
LinkedHashMap
无论是简单的算法题,还是复杂的系统架构,
Stack
Queue
以上就是如何在Java中使用Stack和Queue的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号