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