2016-12-22 46 views
-1

當您使用沒有比較器的PriorityQueue時,隊列會在每次報價後重新排列,如果是,如何避免?每次添加任何內容到** PriorityQueue **時,它是否會重新排列?

+0

爲什麼要避免優先隊列重新排列?優先級隊列的整個想法是保持項目的安排,以便最高優先級的項目位於根目錄。如果您不希望數據結構像優先級隊列那樣工作,那麼您不應該使用優先級隊列。 –

回答

1

從Javadoc中:基於優先級堆

的極大優先級隊列。 優先級隊列的元素根據其自然順序排序,或者由隊列構建時提供的Comparator排序,具體取決於使用哪個構造函數。

是的,當添加元素以保持排序時,隊列會重新排列。你無法避免它。如果您沒有提供Comparator,則使用自然順序(由Compabable元素類型的實現定義)。如果這不符合您的目的,請不要使用PriorityQueue

+0

這不是嚴格正確的。如果必須維護堆屬性,元素纔會重新排列,但在許多情況下,添加的值只會創建新的葉子。這是優先級隊列和排序結構(數組,二叉樹等)之間的區別,以及爲什麼它比後者具有更好的性能。 –

相關問題