Comparator は、Comparable を実装していないクラスのオブジェクトを比較するために使用できます。 Comparable インターフェイス (このセクション) を使用して要素を比較する方法を学習しました。 Java API のいくつかのクラス (String、Date、Calendar、BigInteger、BigDecimal など)プリミティブ型のすべての数値ラッパー クラスは、Comparable インターフェイスを実装します。 Comparable インターフェイスは、compareTo メソッドを定義します。このメソッドは、Comparable インターフェイスを実装する同じクラスの 2 つの要素を比較するために使用されます。
要素のクラスがComparable インターフェースを実装していない場合はどうなりますか?これらの要素を比較できますか? コンパレータを定義して、異なるクラスの要素を比較できます。これを行うには、java.util.Comparator インターフェースを実装し、その compare メソッドをオーバーライドするクラスを定義します。
public int Compare(T 要素 1, T 要素 2)
element1がelement2より小さい場合は負の値を返し、element1がelement2より大きい場合は正の値を返し、ゼロを返します。それらが等しい場合。
GeometricObject クラスは、「抽象クラス」セクションで紹介されました。 GeometricObject クラスは、Comparable インターフェイスを実装しません。 GeometricObject クラスのオブジェクトを比較するには、以下のコードに示すように、コンパレーター クラスを定義できます。
行 4 は
コンパレーター を実装します。 5 行目は、compare メソッドをオーバーライドして、2 つの幾何学オブジェクトを比較します。このクラスは Serializable も実装します。コンパレーターはシリアル化可能なデータ構造で順序付けメソッドとして使用できるため、コンパレーターで Serializable を実装することは一般に良い考えです。データ構造が正常にシリアル化されるためには、コンパレーター (提供されている場合) が Serializable. を実装する必要があります。
以下のコードは、2 つの幾何学的オブジェクトの間のより大きなオブジェクトを返すメソッドを示します。オブジェクトは、GeometricObjectComparator. を使用して比較されます。
プログラムは 7 ~ 8 行目で
Rectangle と Circle オブジェクトを作成します (Rectangle と Circle クラスは「抽象クラス」のセクションを参照してください)。これらはすべて GeometricObject のサブクラスです。プログラムは max メソッドを呼び出して、より大きな面積の幾何学オブジェクトを取得します (10 行目)。
GeometricObjectComparator が作成され、max メソッド (行 10) に渡されます。このコンパレーターは、max メソッドで幾何学オブジェクトを比較するために使用されます。 16行目.
Comparable は、Comparable を実装するクラスのオブジェクトを比較するために使用されます。 Comparator は、Comparable を実装していないクラスのオブジェクトを比較するために使用できます。
Comparable インターフェースを使用した要素の比較は、自然順序 を使用した比較と呼ばれ、Comparator インターフェースを使用した要素の比較は、コンパレータ.
以上がコンパレータインターフェイスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。