簡體   English   中英

Java標准集合中的最大優先級隊列。 有一個嗎?

[英]Max-priority Queue in the Java's standard Collections. Is there one?

我需要一個Max-Priority Queue數據結構。

在Java的Priority Queue中,我注意到它是Min-Priority Queue

從javadoc:

就指定的順序而言,此隊列的頭是最小的元素

我看到可以選擇提供一個自定義Comparator並查看一些建議使用一個Comparator帖子,然后進行反向比較以獲得“ Max Priority Queue的結果。
在我看來,這雖然是“丑陋的事情”,但也許不是直觀的。

這是從Java的標准集合中獲取Max-Priority Queue的唯一方法嗎?
我還有更合適的對象嗎? (例如,前一段時間我沒有意識到StackDeque取代了……我的錯)

AFAIK,是的,這是擁有所需東西的最佳方式。 我真的不明白這是多么丑陋的駭客。 如果僅提供一個就足夠了,就沒有必要提供兩個不同的類。 如果遵循您的推理,我們將擁有一個MinTreeSet和一個MaxTreeSet,一個MinTreeMap和一個MaxTreeMap等,它們的作用完全相同。 這是策略模式的經典用法。

只需使用Collections.reverseOrder()即可獲得一個比較器,該比較器以自然順序的相反順序進行比較。

這不是最小堆。 您誤解了這一部分:

就指定的順序而言,此隊列的頭是最小的元素。

重點在於指定的順序 那可以是任何東西,包括降序比較。 提供您自己的比較器是應該如何使用它,絕對不是“丑陋的hack”。

剛開始時:

此隊列根據構造時指定的順序對元素進行排序,該順序可以根據其自然順序(請參閱Comparable),也可以根據Comparator來指定,具體取決於所使用的構造函數。

這清楚地表明,提供您自己的比較器是預期的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM