2009-03-09 7 views
2

JavaのPriorityQueueは、リストの先頭に最小要素を配置しますが、先頭に最大要素を配置する必要があります。どのようなものが、そのような振る舞いをする優先キューを得るための最もきれいな方法ですか。Javaでは、最も重要な要素を最初に返すPriorityQueueにはどうすればよいですか?

私はこのキューに格納されているクラスを書きましたので、このキューの外側で使用されていないcompareToの結果を単純に逆転できます。

しかし私はコードを私がモデリングしているものの正確な表現にしたいと思っています。私がしようとしているのは、コードが最も奇妙な定義でなく、

[編集]皆さん、すばやく皆さんに感謝します。コンパレータは、私が自分自身に1つの書き方を教えるとすぐに必要なもののように聞こえます。

答えて

10

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

は、それはこのようになります:

public class ReverseYourObjComparator implements Comparator<YourObj> { 
    public int compare(final YourObj arg0, final YourObj arg1) { 
     return 0 - arg0.compareTo(arg1); 
    } 
} 
+0

おかげで、私はあなたがすでにコンパレータを持っていますが、逆の並べ替えをしたい場合は、あなたがかもしれない –

+1

:)ことを行う方法を自分自身を教えて行きますよCollections.reverseOrder()が役に立ちました。 –

+0

ありがとう、しかし、私はちょうどそれを書いて、0 - arg0.compareTo(arg1)私のifよりも、私はそれを代わりに使用すると思います。 –

2

私はちょうどコンパレータを使用すると思います。この方法では、ソート順は、クラスに添付されるのではなく、キュー内でのみ使用されます。

2

PriorityQueueのカスタムComparator<? super E>を提供し、要素の順序を変更するだけです。 javadocから

2

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 
3

あなたは基本的には右のあなたの質問に解決策を持っている:あなたはPriorityQueueのコンストラクタにComparatorを渡すことができます。 Comparatorはアイテムの順序に影響します。

0

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

1

、コンパレータのコメントに追加チェックアウトするには:

Collections.reverseOrder(); 
関連する問題