Java 中的优先队列
Farkhanda Athar
2023年10月12日
Java
Java Queue
- 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.io.*;
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");
System.out.println(pq);
}
}
输出:
[To, Welcome, Party]
从 PriorityQueue 中删除元素
要从 PriorityQueue 中删除元素,我们可以使用 delete() 方法。如果有多个这样的对象,则删除该对象的第一个实例。此外,还可以使用 poll() 方法获取头部然后替换它。
import java.io.*;
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");
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
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe