Java Deque 接口

2025 年 4 月 1 日 | 阅读 4 分钟

Java Deque 接口属于 java.util 包。它是 Queue 接口的子类型。Deque,是双端队列(double-ended queue)的缩写。Deque 支持在数据结构的两个端点上添加和移除元素。

因此,Deque 可以用作栈或队列。我们知道栈支持后进先出 (LIFO) 操作,而队列支持先进先出 (FIFO) 操作。由于 Deque 支持这两种操作,因此可以在其上执行上述任一操作。Deque 为管理集合中的元素提供了一个强大的抽象,其中两端都可用于插入和移除操作。

Deque 接口声明

Java Deque 接口的方法

方法描述
boolean add(object)用于将指定元素插入此 Deque,成功时返回 true。
boolean offer(object)用于将指定元素插入此 Deque。
Object remove()用于检索并移除此 Deque 的头部。
Object poll()用于检索并移除此 Deque 的头部,如果此 Deque 为空,则返回 null。
Object element()用于检索但不移除此 Deque 的头部。
Object peek()用于检索但不移除此 Deque 的头部,如果此 Deque 为空,则返回 null。
Object peekFirst()此方法返回 Deque 的头部元素。此方法不会从 Deque 中移除任何元素。如果 Deque 为空,此方法将返回 null。
Object peekLast()此方法返回 Deque 的最后一个元素。此方法不会从 Deque 中移除任何元素。如果 Deque 为空,此方法将返回 null。
Boolean offerFirst(e)将元素 e 插入到队列的头部。如果插入成功,则返回 true;否则返回 false。
Object offerLast(e)将元素 e 插入到队列的尾部。如果插入成功,则返回 true;否则返回 false。
java arraydeque hierarchy

Deque 接口的关键特性

双端操作: Deque 支持允许在队列的前端和后端添加或移除元素的操作。这些操作包括 addFirst(E e)、addLast(E e)、removeFirst() 和 removeLast()。

访问器: Deque 提供了从两端访问元素而不移除它们的方法。这些方法包括 getFirst() 和 getLast()。

特殊插入和移除操作: 除了常规的插入和移除操作外,Deque 还提供了诸如 offerFirst(E e) 和 offerLast(E e) 等用于插入元素的专用操作,以及 pollFirst() 和 pollLast() 用于移除元素的专用操作。

ArrayDeque 类

我们知道在 Java 中无法创建接口的对象。因此,为了实例化,我们需要一个实现 Deque 接口的类,而 ArrayDeque 就是这样一个类。它会根据使用情况进行增长和收缩。它还继承了 AbstractCollection 类。

关于 ArrayDeque 类的要点是

  • 与 Queue 不同,我们可以从两边添加或移除元素。
  • ArrayDeque 不允许 null 元素。
  • 在没有外部同步的情况下,ArrayDeque 不是线程安全的。
  • ArrayDeque 没有容量限制。
  • ArrayDeque 比 LinkedList 和 Stack 更快。

ArrayDeque 继承体系

ArrayDeque 类的继承体系显示在页面右侧的图表中。

ArrayDeque 类声明

让我们看一下 java.util.ArrayDeque 类的声明。

Java ArrayDeque 示例

示例

编译并运行

输出

Ravi
Vijay
Ajay

Java ArrayDeque 示例:offerFirst() 和 pollLast()

文件名: DequeExample.java

输出

After offerFirst Traversal...
jai
arvind
vimal
mukul
After pollLast() Traversal...
jai
arvind
vimal

Java ArrayDeque 示例:书籍

示例

编译并运行

输出

101 Let us C Yashwant Kanetkar BPB 8
102 Data Communications & Networking Forouzan Mc Graw Hill 4
103 Operating System Galvin Wiley 6

Java Deque 接口为管理需要两端进行插入和移除操作的集合提供了通用且高效的抽象。其丰富的方法集支持各种操作,使其适用于广泛的应用。无论我们是实现双端队列、栈数据结构,还是解决复杂的算法问题,Deque 接口都提供了简化开发流程所需的工具。


下一主题Java Map 接口