2012-01-24 43 views
3

Java中的PriorityQueue的javadoc說: 該隊列的頭部相對於指定的排序是最少的元素。Java PriorityQueue返回最小元素作爲第一個

有誰知道這個類是打算用作堆還是隻是碰巧適合堆描述? 如果它應該是堆,那麼我很困惑,爲什麼他們選擇通過remove()返回的'least'元素?爲什麼'least'元素具有最優先級或者像'最大堆中使用'或'最古老'元素?

在此先感謝

+0

謝謝,這說明了它:) – iralight

+1

'最小元素'是一個抽象的術語,就像在代數中一樣。它意味着您定義的特定順序的第一個元素。你可以使用各種各樣的東西,最大的元素,最需要的元素,等等...... – UmNyobe

+0

@iralight,我很高興我的評論幫助你;不過,我在做了一些更多的研究之後,將它轉移到了答案上。 – Pops

回答

5

堆不一定應該返回的最大元素。這樣做的堆被稱爲最大堆。 Java堆是最小堆,除了在排序/比較步驟中使用大於號而不是小於號之外,它們是完全相同的結構。

通過查看source code/documentation for PriorityQueue並略過JLS後,我看不到任何指示min選擇超過max的任何內容。它可能只是一個硬幣翻轉,或者價值羣體經常從1到n,1是頭部和最小可能值。

+0

堆只是一個實現優先隊列抽象。 –

3

堆有兩個品種,最大堆和最小堆。 Java PriorityQueue使用最小堆,所以head/top是最小的元素。

+0

感謝丹尼爾,這也闡明瞭它 – iralight

0

至於爲何最小元素被刪除返回,從文檔的快速審閱,我會承擔,使優先級1優先級來前2個

+0

是有道理的,但我對這種情況下的優先級定義感到困惑,什麼動機優先級1是一個較小的整數或字母表的第一個字符串 – iralight

0

這是一個常見的誤解,優先隊列是一堆。 A 優先隊列是一個抽象的概念,如「一個列表」或「一個地圖」;就像列表可以用鏈表或數組實現一樣,優先級隊列可以用堆或其他各種方法來實現。

相關問題