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