Java 中的優先佇列
Farkhanda Athar
2023年1月30日
2021年11月18日
- Java 中 PriorityQueue 的宣告
- 將元素新增到 PriorityQueue
- 從 PriorityQueue 中刪除元素
- 訪問 PriorityQueue 元素
- 迭代 PriorityQueue
當物件必須根據優先順序進行處理時,將使用 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