推奨されます, 2019

エディターズチョイス

JavaにおけるComparableとComparatorの違い

ComparableとComparatorはどちらも、オブジェクトのデータ要素を比較するために使用されるJavaの汎用インタフェースです。 Comparableインタフェースはjava.langパッケージにあり、Comparatorインタフェースはjava.utilパッケージにあります。 ComparableインタフェースとComparatorインタフェースの基本的な違いは、Comparableインタフェースは単一のソート順を提供するのに対し、Comparatorインタフェースは複数のソート順を提供することです。 比較表で比較するComparableとComparatorのインターフェースには他にもいくつか違いがあります。

比較表

比較基準同程度のコンパレータ
基本Comparableインタフェースは単一のソート順のみを許可します。Comparatorインタフェースでは複数のソートシーケンスを使用できます。
パッケージComparableインタフェースはjava.langパッケージにあります。Comparatorインタフェースはjava.utilパッケージに含まれています。
方法Comparableインタフェースには単一メソッドしかありません
public int compareTo(Object obj);
Comparatorインタフェースには2つのメソッドがあります。
public int compare(オブジェクトobj1、オブジェクトobj2)
boolean equals(Object obj)
実装比較可能なインタフェースは、オブジェクトを比較するクラスによって実装されます。比較インターフェースは、オブジェクトが比較されるクラスの代わりにsperateクラスによって実装されます。
比較compareTo(Object obj)メソッドは、メソッドの呼び出しに使用されたオブジェクトと、そのメソッドに渡された指定オブジェクトとを比較します。compare(Object obj1、Object obj2)メソッドは、メソッドに渡された両方の指定されたオブジェクトを比較します。
リスト/配列Comparable型のオブジェクトのリストを比較しなければならないとき、CollectionクラスはメソッドすなわちCollections.sort(List lst)を提供します。Comparable型のオブジェクトのリストを比較しなければならないとき、Collectionクラスはメソッドを提供します。
Collections.sort(List、Comparator)。

比較可能の定義

java.langパッケージで利用可能なインタフェースが比較可能です。 クラスは、オブジェクトを自然な順序でソートするために、Comparatorインタフェースを実装しています。 オブジェクトは自然な順序でソートされているため、オブジェクトはASCII値で比較されます。 Comparableインタフェースを実装するクラスは、Byte、Character、Double、Float、Long、Short、String、およびIntegerクラスです。 DateクラスとCalanderクラスでもComparableインタフェースを実装しています。

Comparableインタフェースには、CompareTo(Object obj)というメソッドが1つだけ含まれています。 このメソッドは、メソッドの呼び出しに使用されたオブジェクトとパラメータで指定されたオブジェクトを比較します。メソッドの構文は次のとおりです。

 public int compareTo(Object obj); 

CompareTo(Object obj)メソッドは0を返し、メソッドによって比較された両方のオブジェクトが同じ値を含む場合、呼び出し元のオブジェクトが指定されたオブジェクトより小さい場合は-ve値を返し、大きい場合は+ ve値を返します。 Collectionsクラスはリストの要素をソートするためのsortメソッドを提供します。 Comparable型のリスト(および配列)要素は、“ Collections.sort(List lst)”メソッドを使ってソートできます。

コンパレータの定義

Comparatorはjava.utilパッケージで利用可能なインタフェースです。 オブジェクトが比較されるクラスにインタフェースComparatorが実装されていない代わりに、別のクラスがComparatorインタフェースを実装しているため、ソートロジックは異なるクラスのオブジェクトの各データ要素に適用されます。 Comparatorには、次の2つのメソッドがあります。

 public int compare(オブジェクトobj1、Object obj2)とboolean equals(オブジェクトobj) 

上記のcompare()メソッドは、最初のオブジェクトobj1と2番目のオブジェクトobj2を比較します。 メソッドで比較された両方のオブジェクトに同じ値が含まれている場合、compare()メソッドは0を返し、オブジェクトobj1がオブジェクトobj2よりも小さい場合は-ve値を返し、オブジェクトobj1の値が大きい場合は+ ve値を返します。オブジェクトobj2へ。 equals()メソッドは、指定されたオブジェクトが呼び出し元のオブジェクトと等しいかどうかを確認します。 equals()メソッドは、比較された両方のオブジェクトが等しい場合はtrueを返し、それ以外の場合はfalseを返します 。 Collectionsクラスは、リストと比較型の要素をソートするためのメソッドを提供します。 コンパレータ型のリスト要素は、Collections.sort(List、Comparator)メソッドによってソートされます。

ComparableとComparatorの主な違い

  1. 比較可能なインタフェースでは単一のソート順を使用できるため、compareTo()メソッドでオブジェクトの単一のデータ要素のみを比較できます。一方、比較器インタフェースでは、オブジェクトの複数のデータ要素を比較できます。
  2. 並べ替えロジックは同じクラス内で定義されているため、Comparableインターフェイスは、オブジェクトを比較するクラスによって実装されます。 一方、ソートロジックは各クラスがオブジェクトの単一データ要素のソートを定義し、これらの定義クラスがComparatorインターフェイスを実装する別々のクラスで定義されるため、Comparatorインターフェイスはオブジェクトが比較されるクラスでは実装されません。 。
  3. Comparableインタフェースはjava.langパッケージ内にあり、Comparatorインタフェースはjava.utilパッケージ内にあります。
  4. ComparableインタフェースはcompareTo(Object obj)であるメソッドを1つだけ宣言しますが、Comparatorインタフェースはcompare(Object obj1、Object obj2)とequals(Object obj)の2つのメソッドを宣言します。
  5. ComparableのcompareTo(Object obj)メソッドは、メソッド呼び出しオブジェクトとメソッドに渡された指定オブジェクトを比較しますが、Comparatorのcompare(Object obj1、Object obj2)メソッドは、メソッドに渡されたオブジェクトobj1とobj2を比較します。
  6. Collectionsクラスには、Comparable型のオブジェクトをソートするためのソート方法“ Collections.sort(List lst)”があります。 Collectionsクラスは、Comparator型のオブジェクトをソートするためのソート方法Collections.sort(List、Comparator)を提供します。

結論:

オブジェクトを自然な順序でソートしたい場合は、比較可能なインターフェースを使用できます。それ以外の場合は、属性に基づいてオブジェクトをソートしたい場合は、Comparatorインターフェースを使用します。

Top