在Java中,PriorityQueue
是一個基于優先級的隊列。它的元素按照自然順序(對于可比較元素)或者通過提供的 Comparator
進行排序。默認情況下,PriorityQueue
的排序規則是最小堆,也就是說,隊列的頭部總是最小的元素。
以下是 PriorityQueue
的一些主要特性:
Comparable
接口,那么它們將根據自然順序進行排序。否則,你需要提供一個 Comparator
來定義排序規則。NullPointerException
。PriorityQueue
不是線程安全的。如果多個線程同時訪問一個 PriorityQueue
,而至少有一個線程修改了隊列,那么它必須保持外部同步。如果你想要一個最大堆的優先隊列,你可以在自定義類中實現 Comparable
接口并重寫 compareTo
方法,或者提供一個自定義的 Comparator
。例如,對于整數,你可以這樣創建一個最大堆的 PriorityQueue
:
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
這將創建一個 PriorityQueue
,其中整數按照降序排列。