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