Javaでは、最も大きい要素を最初に返すPriorityQueueに何を使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

質問

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ドキュメントには、次のように記載されています。したがって、最小の定義は特定の順序に基づいて主観的であるため、コンパレータを提供するオプションがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top