上節(jié)介紹了堆的基本概念和算法,本節(jié)我們來探討堆在Java中的具體實現(xiàn)類 - PriorityQueue。

我們先從基本概念談起,然后介紹其用法,接著分析實現(xiàn)代碼,最后總結(jié)分析其特點。

基本概念

顧名思義,PriorityQueue是優(yōu)先級隊列,它首先實現(xiàn)了隊列接口(Queue),與LinkedList類似,它的隊列長度也沒有限制,與一般隊列的區(qū)別是,它有優(yōu)先級的概念,每個元素都有優(yōu)先級,隊頭的元素永遠都是優(yōu)先級最高的。

PriorityQueue內(nèi)部是用堆實現(xiàn)的,內(nèi)部元素不是完全有序的,不過,逐個出隊會得到有序的輸出。

雖然名字叫優(yōu)先級隊列,但也可以將PriorityQueue看做是一種比較通用的實現(xiàn)了堆的性質(zhì)的數(shù)據(jù)結(jié)構(gòu),可以用PriorityQueue來解決適合用堆解決的問題,下一節(jié)我們會來看一些具體的例子。

基本用法

Queue接口

PriorityQueue實現(xiàn)了Queue接口,我們在LinkedList一節(jié)介紹過Queue,為便于閱讀,這里重復(fù)下其定義: