精通 Java Deque 接口:特性、方法与实战示例
Java Deque 接口
深入了解 Java Deque 接口如何提供灵活的双端队列,并学会在实际代码中运用其强大方法。
Deque 的工作原理
与仅支持尾部入队、头部出队的普通队列不同,Deque(双端队列)允许从两端添加和移除元素。这种灵活性使其适用于 LIFO、FIFO 及更复杂的数据处理模式。

实现 Deque 的类
使用 Deque 时,可选择以下具体实现:
ArrayDeque— 基于可调整大小的数组,提供快速、非同步的访问。LinkedList— 双向链表,支持 null 元素,插入性能强劲。

在代码中使用 Deque
先导入接口:
import java.util.Deque;
再实例化具体类:
// 数组实现
Deque<String> animal1 = new ArrayDeque<>();
// LinkedList 实现
Deque<String> animal2 = new LinkedList<>();
这些对象即暴露所有 Deque 操作。
Deque 的关键方法
因 Deque 继承 Queue,故拥有所有队列方法。此外,它还提供针对两端的专用操作:
- addFirst(e) — 在头部插入
e,满时抛异常。 - addLast(e) — 在尾部追加
e,满时抛异常。 - offerFirst(e) — 尝试在头部插入,满时返回
false。 - offerLast(e) — 尝试在尾部追加,满时返回
false。 - getFirst() / getLast() — 获取首/尾元素,空时抛异常。
- peekFirst() / peekLast() — 获取首/尾元素,空时返回
null。 - removeFirst() / removeLast() — 移除并返回首/尾元素,空时抛异常。
- pollFirst() / pollLast() — 移除并返回首/尾元素,空时返回
null。
Deque 作为栈使用
遗留 Stack 类同步且效率较低。Deque 提供现代、非同步的替代方案:
push(e)— 将e压入头部。pop()— 移除并返回头部元素。peek()— 获取头部元素不移除。
ArrayDeque 实战示例
import java.util.Deque;
import java.util.ArrayDeque;
class Main {
public static void main(String[] args) {
Deque<Integer> numbers = new ArrayDeque<>();
// 填充 deque
numbers.offer(1); // 尾部
numbers.offerLast(2); // 尾部
numbers.offerFirst(3); // 头部
System.out.println("Deque: " + numbers);
// 查看两端
System.out.println("首元素: " + numbers.peekFirst());
System.out.println("尾元素: " + numbers.peekLast());
// 移除元素
System.out.println("移除首元素: " + numbers.pollFirst());
System.out.println("移除尾元素: " + numbers.pollLast());
System.out.println("更新后的 Deque: " + numbers);
}
}
输出
Deque: [3, 1, 2] 首元素: 3 尾元素: 2 移除首元素: 3 移除尾元素: 2 更新后的 Deque: [1]
更多细节请查阅官方 Java ArrayDeque 文档。
java
- 掌握 C# 接口:定义、实现与实战场景全解析
- C# 接口完全指南:定义契约、实现多态与解耦设计
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java super 关键字:高级用法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- 掌握 Java NavigableSet 接口:导航、排序与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 9 接口私有方法:增强封装与代码复用