Java 中构建**栈结构(LIFO)**的几种常见方式和它们的区别:
✅ 1. Deque 接口 + ArrayDeque 实现类(⭐推荐)
Deque<Character> stack = new ArrayDeque<>();
✅ 特点:
Deque(双端队列)可以同时支持栈(后进先出)和队列(先进先出);ArrayDeque是它的高效实现类;- 使用
push()/pop()/peek()模拟栈行为; - 比
Stack类效率高,因为没有同步开销(线程不安全但更快); - JDK 官方推荐:自 Java 6 起,建议用
ArrayDeque替代Stack。
使用示例:
Deque<Character> stack = new ArrayDeque<>();
stack.push('a'); // 压栈
stack.pop(); // 弹栈
stack.peek(); // 查看栈顶
✅ 2. Stack 类(老派方式,不推荐)
Stack<Character> stack = new Stack<>();
✅ 特点:
Stack是Vector的子类,是 Java 早期版本中提供的栈结构;- 方法:
push(),pop(),peek(); - 线程安全(同步) → 有性能开销;
- 不推荐用于单线程程序;
使用示例:
Stack<Character> stack = new Stack<>();
stack.push('a');
stack.pop();
stack.peek();
✅ 3. LinkedList 作为 Deque 的实现类(也可以用于栈)
Deque<Character> stack = new LinkedList<>();
✅ 特点:
LinkedList也实现了Deque接口;- 同样可以用
push()/pop()/peek()来模拟栈; - 但相比
ArrayDeque来说,它底层是链表结构,缓存局部性差,访问较慢; - 除非你特别需要在任意位置插入/删除,一般推荐
ArrayDeque;
✅ 总结比较:
| 方式 | 是否推荐 | 是否线程安全 | 底层结构 | 性能 | 特点 |
|---|---|---|---|---|---|
ArrayDeque | ⭐推荐 | ❌ | 数组 | 快(O(1)) | 官方推荐替代 Stack |
Stack | ❌不推荐 | ✅ | 动态数组 (Vector) | 慢(同步开销) | 过时,用于早期线程安全需求 |
LinkedList | ✅可选 | ❌ | 链表 | 中等 | 双向链表实现,可当队列/栈使用 |
✅ 什么时候用哪个?
- 默认推荐:
ArrayDeque→ 更快、更简洁、现代写法; - 老项目兼容: 可能还在使用
Stack; - 需要双端队列或链式结构:
LinkedList适合插入/删除操作频繁的场景;
1671

被折叠的 条评论
为什么被折叠?



