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]