2

Java のPriorityQueueは最小の要素をリストの先頭に配置しますが、最大の要素を先頭に配置する必要があります。そのように動作する優先キューを取得する最も適切な方法は何ですか。

このキューに格納されたクラスを作成したので、このキューのcompareTo外では使用されず、 の結果を単純に逆にすることができました。

しかし、私がモデリングしているものをコードで正確に表現したいのですが、私がやろうとしているのは、最初に最大のものを取得することです.

[編集] 皆さん、どうもありがとうございました。 Comparator は、自分で書き方を学ぶとすぐに必要なもののように聞こえます。

4

7 に答える 7

10

PriorityQueueをインスタンス化するときに自然順序を反転するComparatorを渡します。

次のようになります。

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}
于 2009-03-09T17:07:46.933 に答える
3

あなたは基本的にあなたの質問に正しい解決策を持っています: ComparatorをPriorityQueueのコンストラクターに渡すことができます。コンパレーターは、アイテムの注文方法に影響を与えます。

于 2009-03-09T17:09:31.190 に答える
2

コンパレータを使用するだけです。このようにして、ソート順はクラスに関連付けられるのではなく、キューでのみ使用されます。

于 2009-03-09T17:08:48.693 に答える
2

コンストラクターを介してPriorityQueueカスタムを提供し、要素の順序を変更するだけです。Comparator<? super E>

于 2009-03-09T17:09:20.423 に答える
2

javadoc から:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 
于 2009-03-09T17:09:22.313 に答える
0

PriorityQueue の API ドキュメントには、「このキューの先頭は、指定された順序に関して最小の要素です」と記載されています。したがって、最小の定義は特定の順序に基づいて主観的であるため、コンパレータを提供するオプションがあります。

于 2009-03-09T17:12:24.677 に答える