Java Queue

2025年5月9日 | 阅读 7 分钟

队列是另一种线性数据结构,它以特定的方式存储元素,就像其他数据结构一样。简单来说,我们可以说队列是一种 Java 编程语言中的数据结构,它存储相同类型的元素。队列中的组件按照 FIFO(先进先出)行为存储。队列集合有两个端,即前端和后端。队列有两个端,即前端和后端。

下图完美地描述了 Java 队列的 FIFO(先进先出)属性。

Java Queue

正如在前一张图中解释的那样,我们可以看到队列是一种具有两个终端的线性数据结构,即开始(前端)和结束(后端)。组件从队列的后端添加到队列中,组件从队列的前端提取。

Queue 是 Java 中的一个接口,属于 Java.util 包。它还扩展了 Collection 接口

下面显示了 Java Queue 接口的通用表示

正如我们在上面讨论过的,Queue 是一个接口,因此我们也可以说 Queue 不能被实例化,因为接口不能被实例化。如果用户想在 Java 中实现 Queue 接口的功能,那么就必须有一些实现 Queue 接口的实际类。

在 Java 编程语言中,有两个不同的类用于实现 Queue 接口。这些类是

Java Queue

Java 队列的特点

Java 队列可以被认为是编程界最重要的数据结构之一。Java 队列因其属性而具有吸引力。Java 队列数据结构的重要属性如下

  • Java 队列遵循 FIFO(先进先出)的模式。这意味着元素在队列末尾进入,在队列前端删除。
  • Java Queue 接口提供了 Collection 接口的所有规则和过程,如包含、删除等。
  • 有两种不同的类用于实现 Queue 接口。这些类是 LinkedList 和 PriorityQueue。
  • 除了这两个之外,还有一个类 Array Blocking Queue,用于实现 Queue 接口。
  • 队列有两种类型:无界队列和有界队列。属于 java.util 包的队列称为无界队列,有界队列是存在于 java.util.concurrent 包中的队列。
  • Deque 或(双端队列)也是一种队列,它可以在两端进行元素的插入和删除。
  • Deque 也被认为是线程安全的。
  • Blocking Queues 也是一种队列,同样是线程安全的。Blocking Queues 用于实现生产者-消费者查询。
  • Blocking Queues 不支持 null 元素。在 Blocking Queues 中,如果尝试执行类似 null 值的工作,则会抛出 NullPointerException。

队列的实现

用于实现队列的类

用于实现队列功能的类如下

用于实现队列的接口

Java 接口也用于实现 Java 队列。用于实现队列功能的接口如下

Java Queue
  • Deque
  • Blocking Queue
  • Blocking Deque
Java Queue

Java 队列类方法

在 Java 队列中,有许多常用的方法。Queue 接口提供了插入、删除、查看等不同的方法。Java 队列的一些操作会引发异常,而其中一些操作会在程序完成后返回值。

注意 - 在 Java SE 8 中,Java 队列集合没有进行任何更改。下面定义的这些方法在 Java 编程语言的后续版本中进一步准备。例如,Java SE 9。

下面定义了 Java 队列的不同方法

方法方法原型描述
addboolean add(E e)将元素 e 添加到队列的末尾(尾部),而不违反容量限制。如果成功则返回 true,如果容量已满则返回 IllegalStateException。
peekE peek()返回队列的头部(前端),而不将其移除。
elementE element()执行的操作与 peek() 方法相同。当队列为空时,抛出 NoSuchElementException。
removeE remove()移除队列的头部并返回它。如果队列为空,则抛出 NoSuchElementException。
pollE poll()移除队列的头部并返回它。如果队列为空,则返回 null。
Offerboolean offer(E e)将新元素 e 插入队列,而不违反容量限制。
大小int size()返回队列的大小或元素数量。

Java 队列数组实现

队列的实现不像栈的实现那样简单明了。

要使用数组实现队列,我们首先声明一个包含 n 个元素的数组。

然后我们定义要在队列中执行的以下操作。

1) Enqueue:在队列中插入元素的操作是 Enqueue(程序中的函数 queue Enqueue)。要将元素插入到后端,我们首先需要检查队列是否已满。如果已满,则无法插入元素。如果 rear < n,则将元素插入队列。

2) Dequeue:从队列中删除元素的操作是 Dequeue(程序中的函数 queue Dequeue)。首先,我们检查队列是否为空。要使 dequeue 操作正常工作,队列中必须至少有一个元素。

3) Front:此方法返回队列的前端。

4) Display:此方法遍历队列并显示队列中的元素。

Java 队列程序

以下 Java 程序演示了队列的实现。

QueueArrayImplementation.java

输出

Initial Queue:
Queue is Empty
Queue after Enqueue Operation:
 10 ,  30 ,  50 ,  70 , 
Front Element of the queue: 10
Queue is full
 10 ,  30 ,  50 ,  70 , 
Queue after two dequeue operations: 50 ,  70 , 
Front Element of the queue: 50

Java 队列链表实现

正如我们在上面的程序中使用数组实现了 Queue 数据结构一样,我们也可以使用链表来实现 Queue。

我们将在本程序中实现相同的 enqueue、dequeue、front 和 display 方法。不同之处在于我们将使用链表数据结构而不是数组。

下面的程序演示了 Java 中队列的链表实现。

QueueLLImplementation.java

输出

Element 6 added to the queue
Element 3 added to the queue
Front of the queue:6 Rear of the queue:3
Element 12 added to the queue
Element 24 added to the queue
Element 6 removed from the queue
Element 3 removed from the queue
Element 9 added to the queue
Front of the queue:12 Rear of the queue:9