Java 中的優先佇列

Farkhanda Athar 2023年1月30日 2021年11月18日
  1. Java 中 PriorityQueue 的宣告
  2. 將元素新增到 PriorityQueue
  3. 從 PriorityQueue 中刪除元素
  4. 訪問 PriorityQueue 元素
  5. 迭代 PriorityQueue
Java 中的優先佇列

當物件必須根據優先順序進行處理時,將使用 PriorityQueue。它也是基於先進先出演算法,但有時需要根據優先順序來處理元素。這就是 PriorityQueue 發揮作用的原因。PriorityQueue 基於優先順序堆。PriorityQueue 中的元素按照自然順序排列,在 queue 構造時,這取決於使用了哪個建構函式。

Java 中 PriorityQueue 的宣告

public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable

這裡,E 是這個佇列中元素的型別。

讓我們討論如何在 PriorityQueue 類上執行不同的操作。

將元素新增到 PriorityQueue

要將專案新增到 PriorityQueue,可以使用 add() 方法或 addition() 方法。插入順序不儲存在 PriorityQueue 中。這些元素將按照優先順序順序儲存,預設情況下會升序。

例子:

import java.util.*;
import java.io.*;

public class PriorityQueueDemo {
    public static void main(String args[])
    {
        PriorityQueue<String> pq = new PriorityQueue<>();

        pq.add("Welcome");
        pq.add("To");
        pq.add("Party");
        System.out.println(pq);
    }
}

輸出:

[To, Welcome, Party]

從 PriorityQueue 中刪除元素

要從 PriorityQueue 中刪除元素,我們可以使用 delete() 方法。如果有多個這樣的物件,則刪除該物件的第一個例項。此外,還可以使用 poll() 方法獲取頭部然後替換它。

import java.util.*;
import java.io.*;
public class PriorityQueueDemo {

    public static void main(String args[])
    {
        PriorityQueue<String> pq = new PriorityQueue<>();
        pq.add("Welcome");
        pq.add("To");
        pq.add("Party");

        System.out.println("Initial PriorityQueue " + pq);
        pq.remove("Geeks");
        System.out.println("After Remove - " + pq);
        System.out.println("Poll Method - " + pq.poll());
        System.out.println("Final PriorityQueue - " + pq);
    }
}

輸出:

Initial PriorityQueue [To, Welcome, Party]
After Remove - [To, Welcome]
Poll Method - To
Final PriorityQueue - [Party]

訪問 PriorityQueue 元素

因為 Queue 是基於其先進先出原則,我們只能訪問 Queue 的頭部。要訪問優先順序 Queue 元素,你可以使用 peek() 方法。

例子:

// Java program to access elements
// from a PriorityQueue
import java.util.*;

class PriorityQueueDemo {

    // Main Method
    public static void main(String[] args)
    {

        // Creating a priority queue
        PriorityQueue<String> pq = new PriorityQueue<>();
        pq.add("Welcome");
        pq.add("To");
        pq.add("Party");
        System.out.println("PriorityQueue: " + pq);

        // Using the peek() method
        String element = pq.peek();
        System.out.println("Accessed Element: " + element);
    }
}

輸出:

PriorityQueue: [To, Welcome, Party]
Accessed Element: To

迭代 PriorityQueue

有很多方法可以遍歷 PriorityQueue。最著名的方法是將 queue 轉換為陣列,然後使用 for 迴圈遍歷它。此外,queue 帶有一個內部迭代器,可用於在 queue 之間迴圈。

例子:

import java.util.*;
public class PriorityQueueDemo {

    public static void main(String args[])
    {
        PriorityQueue<String> pq = new PriorityQueue<>();

        pq.add("Welcome");
        pq.add("To");
        pq.add("Party");

        Iterator iterator = pq.iterator();

        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
    }
}

輸出:

To Welcome Party

相關文章 - Java Queue