Java Queue 接口

1 Apr 2025 | 5 分钟阅读

Java Queue 接口属于 java.util 包。它是 Java 集合框架的一个基本组成部分,用于以特定顺序处理元素,通常是先进先出 (FIFO) 的方式。作为一个有序对象列表,Queue 确保元素在末尾插入,在开头移除,使其成为任务调度、订单处理和打印作业管理等场景的理想数据结构。

作为接口,Queue 不能直接实例化。它需要一个具体的实现。Java 中实现 Queue 接口最常见的类是 LinkedList 和 PriorityQueue。LinkedList 类提供了双向链表实现,而 PriorityQueue 类基于优先堆,根据其自然排序或指定的比较器对元素进行排序。

然而,这些标准实现不是线程安全的,因此不适用于多个线程可能同时访问和修改队列的并发应用程序。对于此类用例,Java 在 java.util.concurrent 包中提供了 PriorityBlockingQueue 类,它提供了一个线程安全的优先队列实现。

Queue 接口本身扩展了 Collection 接口,继承了其所有方法,并添加了一些用于元素插入、移除和检查的特定方法。关键方法包括用于插入的 add 和 offer,用于移除的 remove 和 poll,以及用于检查的 element 和 peek。这些方法旨在满足队列的独特需求,例如在操作因容量限制或队列为空而失败时返回特殊值或抛出异常。

Queue 接口声明

Java Queue 接口的方法

方法描述
boolean add(object)用于将指定元素插入此队列,成功时返回 true。
boolean offer(object)用于将指定元素插入此队列。
Object remove()用于检索并移除此队列的头部。
Object poll()用于检索并移除此队列的头部,如果此队列为空,则返回 null。
Object element()用于检索但不移除此队列的头部。
Object peek()用于检索但不移除此队列的头部,如果此队列为空,则返回 null。

队列的特点

以下是队列的一些重要特点。

  • 如前所述,FIFO(先进先出)概念用于队列中元素的插入和删除。
  • Java Queue 支持 Collection 接口的所有方法,包括删除、插入等。
  • PriorityQueue、ArrayBlockingQueue 和 LinkedList 是最常用的实现。
  • 如果在 BlockingQueues 上执行任何 null 操作,将引发 NullPointerException。
  • 位于 util 包中的 Queue 被称为无界队列(Unbounded Queues)。
  • 位于 util.concurrent 包中的 Queue 被称为有界队列(bounded Queues)。
  • 除了 Deque(双端队列)之外,所有 Queue 都允许在队列的头部和尾部分别进行移除和插入;事实上,Deque 支持在两端进行元素的插入和移除。

PriorityQueue 类

PriorityQueue 也是集合框架中定义的一个类,它提供了一种根据优先级处理对象的方式。前面已经说过,Java Queue 中对象的插入和删除遵循 FIFO 模式。但是,有时需要根据优先级处理队列中的元素,这时 PriorityQueue 就派上用场了。

PriorityQueue 类声明

让我们看看 java.util.PriorityQueue 类的声明。

Java PriorityQueue 示例

文件名: TestCollection12.java

输出

head:Amit
head:Amit
iterating the queue elements:
Amit
Jai
Karan
Vijay
Rahul
after removing two elements:
Karan
Rahul
Vijay

Java PriorityQueue 示例:书籍

我们来看一个 PriorityQueue 示例,其中我们向队列中添加书籍并打印所有书籍。PriorityQueue 中的元素必须是 Comparable 类型。String 和 Wrapper 类默认是 Comparable 的。要将用户定义的对象添加到 PriorityQueue 中,您需要实现 Comparable 接口。

文件名: LinkedListExample.java

输出

Traversing the queue elements:
101 Data Communications & Networking Forouzan Mc Graw Hill 4
233 Operating System Galvin Wiley 6
121 Let us C Yashwant Kanetkar BPB 8
After removing one book record:
121 Let us C Yashwant Kanetkar BPB 8
233 Operating System Galvin Wiley 6