📅  最后修改于: 2023-12-03 15:16:30.976000             🧑  作者: Mango
优先队列是一种特殊的队列,它的元素具有优先级,每次出队的是具有最高优先级的元素。如果优先级相同时,按照先进先出的顺序。
在Java的util包中,提供了一个优先队列类 PriorityQueue,可以通过它来实现优先队列的功能。
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
// 创建一个优先队列
PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>();
// 添加元素
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(5);
priorityQueue.add(4);
priorityQueue.add(2);
// 输出队列,注意观察元素的顺序
System.out.println(priorityQueue);
// 出队并输出元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
}
输出结果:
[1, 2, 5, 4, 3]
1
2
3
4
5
我们也可以通过自定义比较器来实现按照指定的规则排序。比如按照元素的值大小倒序排列,代码示例如下:
import java.util.Comparator;
import java.util.PriorityQueue;
public class ComparatorExample {
public static void main(String[] args) {
// 创建一个自定义的比较器来实现倒序排列
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
};
// 创建一个优先队列,并使用自定义的比较器
PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>(comparator);
// 添加元素
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(5);
priorityQueue.add(4);
priorityQueue.add(2);
// 输出队列,注意观察元素的顺序
System.out.println(priorityQueue);
// 出队并输出元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
}
输出结果:
[5, 4, 3, 1, 2]
5
4
3
2
1
优先队列是一种具有优先级的队列, Java中的 PriorityQueue 类能够实现优先队列的常用操作,如添加元素及出队。在使用时,可以使用默认的比较器自然排序,也可以自定义比较器按照自己的规则来排序。