优先队列

在 Java 中,优先队列(PriorityQueue) 是一个基于堆(通常是最小堆)的数据结构,位于 java.util 包中。优先队列的元素会按照自然顺序或提供的比较器顺序进行排序。以下是关于优先队列的详细介绍:


特点

  1. 自动排序:默认是最小优先队列(最小堆),即每次取出的元素是当前队列中最小的元素。
  2. 非线程安全PriorityQueue 不是线程安全的,如果需要线程安全,可以使用 PriorityBlockingQueue
  3. 不允许 null 元素
  4. 支持自定义顺序:可以通过传入 Comparator 定义元素的排序方式。

构造方法

PriorityQueue 提供多种构造方法:

  1. 默认构造方法

    1
    PriorityQueue<E> pq = new PriorityQueue<>();

    创建一个初始容量为 11 的最小堆。

  2. 指定初始容量

    1
    PriorityQueue<E> pq = new PriorityQueue<>(int initialCapacity);
  3. 指定比较器

    1
    PriorityQueue<E> pq = new PriorityQueue<>(Comparator<? super E> comparator);

    创建一个使用自定义比较器的优先队列。

  4. 通过集合初始化

    1
    PriorityQueue<E> pq = new PriorityQueue<>(Collection<? extends E> c);

常用方法

以下是 PriorityQueue 的常用方法:

方法名 说明
add(E e) 向队列中添加元素,若超出容量会抛出异常。
offer(E e) 向队列中添加元素,推荐使用。
poll() 移除并返回队列的头部元素,若队列为空则返回 null
peek() 返回队列的头部元素但不移除,若队列为空则返回 null
remove(Object o) 删除队列中指定的元素。
size() 返回队列中元素的数量。
isEmpty() 判断队列是否为空。
clear() 清空队列中的所有元素。
作者

sonder

发布于

2025-01-15

更新于

2025-02-10

许可协议