質問

見を実装するクラスの両 コンパレータ.これはどういう意味ですか?なぜご利用頂きたいのですか?

役に立ちましたか?

解決

以下のテキストは、コンパレータvs比較可能

同等

比較可能なオブジェクトは、それ自体を別のオブジェクトと比較できます。クラス自体は、インスタンスを比較できるようにjava.lang.Comparableインターフェースを実装する必要があります。

コンパレータ

コンパレータオブジェクトは、2つの異なるオブジェクトを比較できます。クラスはそのインスタンスを比較していませんが、他のいくつかのクラス<!>#8217; sのインスタンスを比較しています。このコンパレータクラスは、java.util.Comparatorインターフェイスを実装する必要があります。

他のヒント

Comparableの実装は、<!> quot; 自分を他のオブジェクトと比較できることを意味します。 <!> quot;これは通常、単一の自然なデフォルト比較がある場合に役立ちます。

Comparatorの実装は、<!> quot; 他の2つのオブジェクトを比較できます。 <!> quot;これは通常、タイプの2つのインスタンスを比較する方法が複数ある場合に役立ちます。年齢、名前などで人を比較できます。

Comparableを使用すると、クラスで独自の比較を実装できます。

  • 同じクラスにある(多くの場合、利点です)
  • 実装は1つのみです(したがって、2つの異なるケースが必要な場合は使用できません)

比較すると、Comparatorは外部比較です:

  • 通常、一意のインスタンス(同じクラスまたは別の場所)にあります
  • あなたが物事をソートしたい方法で各実装に名前を付ける
  • 制御していないクラスのコンパレータを提供できます
  • 実装は最初のオブジェクトがnullであっても使用可能

どちらの実装でも、比較するものを選択できます。 ジェネリックを使用すると、宣言して、コンパイル時にチェックすることができます。これにより安全性が向上しますが、適切な値を決定することも課題です。

ガイドラインとして、私は一般に、そのオブジェクトを比較できる最も一般的なクラスまたはインターフェースを使用しますが、私が想定するすべてのユースケースで...定義はあまり正確ではありません! :-(

  • Comparable<Object>を使用すると、コンパイル時にすべてのコードで使用できます(必要な場合は適切ですが、必要でない場合は無効であり、コンパイル時エラーが発生しません)。実装はオブジェクトに対処し、必要に応じて堅牢な方法でキャストする必要があります。
  • Comparable<Itself>は逆に非常に厳格です。
  

おもしろい、サブクラスに自分自身をサブクラス化するとき、サブクラスも比較可能であり、堅牢である必要があります(または、リスコフの原理を破り、実行時エラーが発生します)。

java.lang.Comparable

  1. Comparableインターフェースを実装するには、クラスは単一のメソッドcompareTo()

    を実装する必要があります

    int a.compareTo(b)

  2. インスタンスをソートするクラスを変更する必要があります。したがって、クラスごとに作成できるソートシーケンスは1つだけです。

java.util.Comparator

  1. Comparatorインターフェースを実装するには、クラスは単一のメソッドcompare()

    を実装する必要があります

    int compare (a,b)

  2. インスタンスをソートするクラスとは別のクラスを構築します。そのため、クラスごとに複数のソートシーケンスを作成できます。

Comparableは、たとえばデータオブジェクトに自然な順序がある場合など、データオブジェクトにデフォルトの順序を提供するためのものです。

A Comparatorは、特定の用途の順序自体を表します。

通常、

Comparableが推奨されます。ただし、クラスがすでにComparatorを実装している場合がありますが、別のプロパティでソートしたい場合があります。次に、Comparatorsの使用を強制されます。

一部のクラスは、実際に一般的な場合にStringを提供します。たとえば、 CASE_INSENSITIVE_ORDER はソート時にはデフォルトで大文字と小文字が区別されますが、もありますrel = "noreferrer"> <=> 。

ここで、私がWebで見つけたComparatorとComparableの違いはわずかです。

  1. これら2つの論理的な違いは、Comparator in Javaが提供された2つのオブジェクトを比較し、Comparableインターフェースが<!> quot; this <!> quot;を比較することです。指定されたオブジェクトとの参照。

  2. JavaのComparableは、オブジェクトの自然な順序付けを実装するために使用されます。 Java API Stringでは、DateクラスとラッパークラスがComparableインターフェースを実装します。

  3. JavaでComparableインターフェイスを実装するクラスがある場合、そのオブジェクトのコレクションは、Collections.sort()またはArray.sort()メソッドを使用して自動的にソートでき、オブジェクトはそこに基づいてソートされますCompareToメソッドで定義された順序。

  4. ComparableをJavaで実装するオブジェクトは、Comparatorを指定せずに、ソートマップのキーまたはTreeSetなどのソートセットの要素として使用できます。

site:JavaでComparatorおよびComparableを使用する方法例付き

詳細: ComparatorとComparableの使用方法Java?例付き

Comparableは、自然な順序のオブジェクト用です。オブジェクト自体は、それがどのように順序付けられるかを知っています。
Comparatorは、自然な順序のないオブジェクト、または別の順序を使用する場合です。

差コンパレータ及びそれに準じるフ

Comparable での比較で使われているそのものを別のオブジェクトです。

Comparator は比較に使用された二つのデータ型はオブジェクト。

見れば、その論理的な違いとは Comparator Javaにおける比較の二つのオブジェクトを行っている。、 Comparable タを比較す"こと"を参照のオブジェクトを指定します。

Comparable Javaでを実装するために使われている自然順序付けのオブジェクトです。Java APIでは、文字列、日付やラッパークラスの実施 Comparable インタフェース。

する場合のクラスの実施 Comparable インタフェースJavaを収集するオブジェクトのいずれか List または Array 自動的にソートでき用 Collections.sort() または Array.sort() 方法及びオブジェクトのソート基づきが自然順で定義される compareTo 方法。

オブジェクトの実施 Comparable Javaとして使用できるキーでソートマップまたは要素のソート、またはソートされた設定例 TreeSet, なく、特定の他 Comparator.

ComparableとComparatorを実装するための注釈ライブラリ:

public class Person implements Comparable<Person> {         
    private String firstName;  
    private String lastName;         
    private int age;         
    private char gentle;         

    @Override         
    @CompaProperties({ @CompaProperty(property = "lastName"),              
        @CompaProperty(property = "age",  order = Order.DSC) })           
    public int compareTo(Person person) {                 
        return Compamatic.doComparasion(this, person);         
    }  
} 

リンクをクリックして、他の例を参照してください。 compamatic

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top