Javaでは、最も大きい要素を最初に返すPriorityQueueに何を使用する必要がありますか?
質問
Javaの PriorityQueue の場所リストの先頭にある最小の要素ですが、最大の要素を先頭に配置する必要があります。そのように動作する優先度キューを取得する最も近い方法は何ですか。
このキューに格納されたクラスを記述したため、このキューの外部では使用されていないcompareTo
の結果を単純に逆にすることができました。
しかし、私はコードをモデリングしているものの正確な表現にするのが好きです、私がやろうとしているのは最大のものを最初に取得することです。
[編集]皆さん、ありがとうございます。Comparatorは、自分で書き方を習うとすぐに必要なもののように聞こえます。
解決
コンパレータは、 PriorityQueue 。
次のようになります:
public class ReverseYourObjComparator implements Comparator<YourObj> {
public int compare(final YourObj arg0, final YourObj arg1) {
return 0 - arg0.compareTo(arg1);
}
}
他のヒント
質問には基本的に解決策があります。コンパレータのコンストラクタへの PriorityQueue 。コンパレータは、アイテムの注文方法に影響します。
コンパレータを使用するだけです。このように、ソート順はクラスに添付されるのではなく、キューでのみ使用されます。
コンストラクタを介してPriorityQueue
カスタムComparator<? super E>
を提供し、要素の順序を変更するだけです。
javadocsから:
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
コンパレータのコメントに追加するには、チェックアウトしてください:
Collections.reverseOrder();
PriorityQueueのAPIドキュメントには、次のように記載されています。したがって、最小の定義は特定の順序に基づいて主観的であるため、コンパレータを提供するオプションがあります。
所属していません StackOverflow