1

私はJavaで汎用ヒープクラスを実装しています。このクラスには2つのコンストラクターがあり、1つはパラメーターのないデフォルトのコンストラクターです。もう1つは、ユーザーがヒープの要素を比較する方法を制御できるように、ユーザーが渡すことができるコンパレータオブジェクトを取り込みます。ここで、ユーザーがデフォルトのコンストラクターを使用する場合、クラスでデフォルトのコンパレーターオブジェクトを使用する必要があります。このオブジェクトのcompareメソッドは、compareTo()メソッド(Comparableインターフェイスの一部)を呼び出すだけです。これを行う方法はありますか?もしそうなら、どのように?

4

4 に答える 4

2

一般的なコンパレータは次のようになります。

public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
  @Override
  public int compare(T lhs, T rhs) {
    return lhs.compareTo(rhs);
  }  
}
于 2012-10-20T21:56:34.590 に答える
1

ComparableComparator任意の2Object秒を取り、それらが実装されている場合はそれらを比較するApacheCommonsから使用しますComparable

または、コンパレータを使用しないコンストラクタは、K extends Comparable<K>型パラメータを適用する必要があります。

于 2012-10-20T21:57:38.410 に答える
1

Guavaは、「自然な順序付け」Comparatorを-予想通り-として提供しますOrdering.natural()

于 2012-10-20T22:14:59.370 に答える
1

Java 8にはComparator.naturalOrder()、デフォルトのコンパレータとして使用できるものがあります。詳細については、 java.util.ComparatorAPIを参照してください。

于 2016-11-30T14:44:31.643 に答える