在Java中,PriorityQueue
是一个基于优先级的队列。它的元素按照自然顺序(对于可比较元素)或者通过提供的 Comparator
进行排序。默认情况下,PriorityQueue
的排序规则是最小堆,也就是说,队列的头部总是最小的元素。
以下是 PriorityQueue
的一些主要特性:
Comparable
接口,那么它们将根据自然顺序进行排序。否则,你需要提供一个 Comparator
来定义排序规则。NullPointerException
。PriorityQueue
不是线程安全的。如果多个线程同时访问一个 PriorityQueue
,而至少有一个线程修改了队列,那么它必须保持外部同步。如果你想要一个最大堆的优先队列,你可以在自定义类中实现 Comparable
接口并重写 compareTo
方法,或者提供一个自定义的 Comparator
。例如,对于整数,你可以这样创建一个最大堆的 PriorityQueue
:
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
这将创建一个 PriorityQueue
,其中整数按照降序排列。