2

T オブジェクトで構成された PriorityQueue があり、T に compareTo() メソッドがあり、同等のものを実装しているが、PriorityQueue もコンパレーターをパラメーターとして受け取る場合、PriorityQueue はその要素の順序付けのために何を調べますか?

つまり、オブジェクトの優先度を決定するのはどれですか? compareTo() メソッドまたは提供されたコンパレータ?

4

4 に答える 4

3

標準の PriorityQueue の場合、 を使用して構築するとComparator<T>、優先度が決まります。そうでない場合は、Comparable<T>が決定します。これはすべて、PriorityQueue APIで詳しく説明されています

于 2012-11-30T02:59:09.630 に答える
3

comparatorコンストラクターのパラメーターのドキュメントには、次のように記載されています

comparator- このプライオリティ キューの順序付けに使用されるコンパレータ。null の場合、順序は要素の自然な順序に依存します。

これは、acomparatorが指定されている場合、メソッドによって確立された自然順序付けcompareToが無視されることを意味します。

于 2012-11-30T02:59:44.493 に答える
1

私はクラスのOracleの実装のソースコードをPriorityQueue読んでいます.Comparatorが使用されているかどうかをチェックし、それを最初に使用しています。それ以外の場合は、Comparable オブジェクトを使用します。

于 2012-11-30T03:03:01.623 に答える
0

Comparable はコレクション内のクラスの自然な順序を定義し、 Comparator は異なる順序を提供できるようにします。別の Comparator を提供することにした場合、それは自然順序をオーバーライドします。コンパレータを入力しないことで、compareTo メソッドで設定された自然順序に戻ります。

于 2012-11-30T03:09:18.017 に答える