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]