0%

优先队列

优先队列(Priority Queue)是一种特殊的队列,它能够根据元素的优先级自动排序。在优先队列中,元素的出队顺序不是按照它们进队的顺序,而是根据元素的优先级确定的,优先级高的元素先出队。优先队列常用于实现任务调度、最小(最大)堆等场景。

Java 中的 PriorityQueue 类实现了优先队列的功能,它使用堆数据结构来实现自动排序。默认情况下,PriorityQueue 是最小堆(即优先级最小的元素先出队),但您也可以通过自定义比较器来创建最大堆。

以下是一个简单的 Java 代码示例,演示如何使用 PriorityQueue 创建一个最小堆:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.PriorityQueue;

public class PriorityQueueExample {
public static void main(String[] args) {
// 创建一个最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();

// 插入元素
minHeap.add(5);
minHeap.add(2);
minHeap.add(8);
minHeap.add(1);
minHeap.add(10);

// 输出堆中的元素(按照升序排列)
while (!minHeap.isEmpty()) {
System.out.print(minHeap.poll() + " ");
}
}
}

在上面的代码中,我们使用 PriorityQueue 创建了一个最小堆。通过 add 方法向堆中插入元素,然后通过 poll 方法逐个弹出并输出堆中的元素。输出的结果将会是升序排列的。

需要注意的是,PriorityQueue 可以存储任何实现了比较接口(如 Comparable 或自定义的比较器)的元素。在创建优先队列时,您可以通过构造函数传递自定义的比较器来控制元素的排序方式。

虽然这只是一个简单的示例,但 PriorityQueue 在实际应用中具有更广泛的用途,如实现 Dijkstra 算法、优先级任务调度等。在使用时,建议您仔细阅读相关文档并根据具体需求进行定制。