Java中的PriorityQueue的javadoc說: 該隊列的頭部相對於指定的排序是最少的元素。Java PriorityQueue返回最小元素作爲第一個
有誰知道這個類是打算用作堆還是隻是碰巧適合堆描述? 如果它應該是堆,那麼我很困惑,爲什麼他們選擇通過remove()返回的'least'元素?爲什麼'least'元素具有最優先級或者像'最大堆中使用'或'最古老'元素?
在此先感謝
Java中的PriorityQueue的javadoc說: 該隊列的頭部相對於指定的排序是最少的元素。Java PriorityQueue返回最小元素作爲第一個
有誰知道這個類是打算用作堆還是隻是碰巧適合堆描述? 如果它應該是堆,那麼我很困惑,爲什麼他們選擇通過remove()返回的'least'元素?爲什麼'least'元素具有最優先級或者像'最大堆中使用'或'最古老'元素?
在此先感謝
堆不一定應該返回的最大元素。這樣做的堆被稱爲最大堆。 Java堆是最小堆,除了在排序/比較步驟中使用大於號而不是小於號之外,它們是完全相同的結構。
通過查看source code/documentation for PriorityQueue
並略過JLS後,我看不到任何指示min選擇超過max的任何內容。它可能只是一個硬幣翻轉,或者價值羣體經常從1到n,1是頭部和最小可能值。
堆只是一個實現優先隊列抽象。 –
至於爲何最小元素被刪除返回,從文檔的快速審閱,我會承擔,使優先級1優先級來前2個
是有道理的,但我對這種情況下的優先級定義感到困惑,什麼動機優先級1是一個較小的整數或字母表的第一個字符串 – iralight
這是一個常見的誤解,優先隊列是一堆。 A 優先隊列是一個抽象的概念,如「一個列表」或「一個地圖」;就像列表可以用鏈表或數組實現一樣,優先級隊列可以用堆或其他各種方法來實現。
謝謝,這說明了它:) – iralight
'最小元素'是一個抽象的術語,就像在代數中一樣。它意味着您定義的特定順序的第一個元素。你可以使用各種各樣的東西,最大的元素,最需要的元素,等等...... – UmNyobe
@iralight,我很高興我的評論幫助你;不過,我在做了一些更多的研究之後,將它轉移到了答案上。 – Pops