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