Java 中的优先级队列比较器
Sheeraz Gul
2023年10月12日
在优先级队列中,每个元素都使用与其关联的特定优先级进行处理。该优先级在与优先级队列关联的比较器函数中定义。
默认情况下,优先级队列是自然排序的;比较器用于给优先级队列一个特定的顺序。这演示了在优先级队列中使用比较器。
在 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]
作者: Sheeraz Gul
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook