Java 中的优先级队列比较器
在优先级队列中,每个元素都使用与其关联的特定优先级进行处理。该优先级在与优先级队列关联的比较器函数中定义。
默认情况下,优先级队列是自然排序的;比较器用于给优先级队列一个特定的顺序。这演示了在优先级队列中使用比较器。
在 Java PriorityQueue
中创建自定义比较器
让我们创建一个自定义比较器来按降序对 PriorityQueue
进行排序。
参见示例:
package delftstack;
import java.util.PriorityQueue;
import java.util.Comparator;
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]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。