Java 中的优先队列

Farkhanda Athar 2023年10月12日
  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.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

相关文章 - Java Queue