HOWTO · Java
Java 中的优先级队列比较器
本教程演示了如何在 Java 中使用 PriorityQueue 比较器方法。
本页内容
在优先级队列中,每个元素都使用与其关联的特定优先级进行处理。该优先级在与优先级队列关联的比较器函数中定义。
默认情况下,优先级队列是自然排序的;比较器用于给优先级队列一个特定的顺序。这演示了在优先级队列中使用比较器。
在 Java PriorityQueue 中创建自定义比较器
让我们创建一个自定义比较器来按降序对 PriorityQueue 进行排序。
参见示例:
package delftstack;
import java.util.Comparator;
import java.util.PriorityQueue;
public class PQ_Comparator {
public static void main(String[] args) {
// Create a priority queue
PriorityQueue<Integer> Demo_PQ = new PriorityQueue<>(new Sort_Comparator());
Demo_PQ.add(3);
Demo_PQ.add(4);
Demo_PQ.add(6);
Demo_PQ.add(5);
Demo_PQ.add(1);
System.out.print("Sorted PriorityQueue According to the comparator: " + Demo_PQ);
}
}
// Comparator class
class Sort_Comparator implements Comparator<Integer> {
@Override
public int compare(Integer x, Integer y) {
if (x < y) {
return 1;
}
if (x > y) {
return -1;
}
return 0;
}
}
上面的代码在类 Sort_Comparator 中创建了一个自定义比较器,并在优先级队列中使用它以降序对其进行排序。
见输出:
Sorted PriorityQueue According to the comparator: [6, 5, 4, 3, 1]
直接在 Java PriorityQueue 中创建比较器
我们也可以直接在优先级队列中创建一个比较器。让我们按降序对同一任务的优先级队列进行排序。
参见示例:
package delftstack;
import java.util.*;
public class PQ_Comparator {
public static void main(String[] args) {
// Create a priority queue
PriorityQueue<Integer> Demo_PQ = new PriorityQueue<Integer>(Collections.reverseOrder());
// PriorityQueue<Integer> Demo_PQ = new PriorityQueue<Integer>((a,b) -> b - a);
// PriorityQueue<Integer> Demo_PQ = new PriorityQueue<Integer>((a,b) -> b.compareTo(a));
Demo_PQ.add(3);
Demo_PQ.add(4);
Demo_PQ.add(6);
Demo_PQ.add(5);
Demo_PQ.add(1);
System.out.print("Sorted PriorityQueue According to the comparator: " + Demo_PQ);
}
}
上面的代码使用内置函数 Collections.reverseOrder 对优先级进行降序排序。注释中给出的其他两个比较器也执行相同的操作。
见输出:
Sorted PriorityQueue According to the comparator: [6, 5, 4, 3, 1]