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(Object obj1、Object obj2) boolean equals(Object obj) |
実装 | 比較可能なインターフェイスは、オブジェクトを比較するクラスによって実装されます。 | コンパレータインターフェイスは、オブジェクトを比較するクラスではなく、別のクラスによって実装されます。 |
比較 | compareTo(Object obj)メソッドは、メソッドの呼び出しに使用されるオブジェクトと、メソッドに渡される指定されたオブジェクトを比較します。 | compare(Object obj1、Object obj2)メソッドは、メソッドに渡された指定された両方のオブジェクトを比較します。 |
リスト/配列 | Comparable型のオブジェクトのリストを比較する必要がある場合、Collectionクラスはメソッド、つまりCollections.sort(List lst)を提供します。 | Comparable型のオブジェクトのリストを比較する必要がある場合、Collectionクラスはメソッドを提供します。 Collections.sort(リスト、コンパレータ)。 |
比較可能の定義
Comparableは、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 指定したオブジェクトと比較して、呼び出し元オブジェクトの値が大きい場合は、values。Collectionsクラスは、リストの要素をソートするためのソートメソッドを提供します。 Comparable型のリスト(および配列)要素は、「Collections.sort(List lst)」メソッドを使用してソートできます。
コンパレータの定義
コンパレータは、java.utilパッケージで使用可能なインターフェイスです。 Comparatorインターフェースは、比較されるオブジェクトのクラスには実装されません。代わりに、別のクラスがComparatorインターフェースを実装するため、異なるクラスのオブジェクトの各データ要素にソートロジックが適用されます。コンパレータには、次の2つのメソッドが含まれています。
public int compare(Object obj1、Object obj2)およびboolean equals(Object obj)
上記のcompare()メソッドは、最初のオブジェクトobj1と2番目のオブジェクトobj2を比較します。 compare()メソッドが返す 0 メソッドによって比較された両方のオブジェクトに同じ値が含まれている場合、 -ve オブジェクトobj1がオブジェクトobj2よりも小さい場合の値 + ve オブジェクトobj1の値がオブジェクトobj2と比較して大きい場合の値。 equals()メソッドは、指定されたオブジェクトが呼び出し元のオブジェクトと等しいかどうかをチェックします。 equals()メソッドが戻ります 本当 比較された両方のオブジェクトが等しい場合、それ以外の場合は戻ります 偽。 Collectionsクラスは、リストとコンパレータータイプの要素を並べ替えるためのメソッドを提供します。コンパレータタイプのリスト要素は、メソッドCollections.sort(List、Comparator)によってソートされます。
- 比較可能なインターフェイスでは、単一のソートシーケンスが可能です。つまり、compareTo()メソッドでオブジェクトの単一のデータ要素のみを比較できます。一方、Comparatorインターフェイスでは、オブジェクトの複数のデータ要素を比較できる複数のソートシーケンスが可能です。
- Comparableインターフェースは、ソートロジックが同じクラス内で定義されているため、オブジェクトが比較されるクラスによって実装されます。一方、Comparatorインターフェースは、比較されるオブジェクトのクラスによって実装されません。これは、ソートロジックが個別のクラスで定義され、各クラスがオブジェクトの単一データ要素のソートを定義し、これらの定義クラスがComparatorインターフェースを実装するためです。
- Comparableインターフェースはjava.langパッケージ内にあり、Comparatorインターフェースはjava.utilパッケージ内にあります。
- Comparableインターフェイスは、compareTo(Object obj)という1つのメソッドのみを宣言しますが、Comparatorインターフェイスは、compare(Object obj1、Object obj2)とequals(Object obj)という2つのメソッドを宣言します。
- ComparableのcompareTo(Object obj)メソッドは、メソッド呼び出しオブジェクトをメソッドに渡された指定オブジェクトと比較しますが、Comparatorのcompare(Object obj1、Object obj2)メソッドは、メソッドobj1とオブジェクトobj1を比較します。
- Collectionsクラスは、Comparable型のオブジェクトを並べ替えるための並べ替えメソッド「Collections.sort(List lst)」を提供します。 Collectionsクラスは、ComparatorタイプのオブジェクトをソートするためのソートメソッドCollections.sort(List、Comparator)を提供します。
結論:
オブジェクトを自然な順序で並べ替える場合は、同等のインターフェイスを使用できます。それ以外の場合は、属性に基づいてオブジェクトを並べ替える場合、Comparatorインターフェイスが使用されます。