Java 中的優先順序佇列比較器

Sheeraz Gul 2023年10月12日
  1. 在 Java PriorityQueue 中建立自定義比較器
  2. 直接在 Java PriorityQueue 中建立比較器
Java 中的優先順序佇列比較器

在優先順序佇列中,每個元素都使用與其關聯的特定優先順序進行處理。該優先順序在與優先順序佇列關聯的比較器函式中定義。

預設情況下,優先順序佇列是自然排序的;比較器用於給優先順序佇列一個特定的順序。這演示了在優先順序佇列中使用比較器。

在 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 Gul avatar Sheeraz Gul avatar

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

相關文章 - Java Comparator