同等の紹介
同等のソートインターフェイスです。
クラスが同等のインターフェイスを実装する場合、それは「このクラスがソートをサポートする」を意味します。同等のインターフェイスをサポートするクラスを実装するクラスは、「同等のインターフェイスを実装するクラスのオブジェクトのリスト(または配列)があると仮定すると、リスト(または配列)をcollections.sort(またはarray.sort)でソートできます。
さらに、「比較可能なインターフェイスを実装するクラスのオブジェクト」は、「順序付けされたマップ(Treemapなど)」のキーとして、またはコンパレータを指定することなく「順序付けられたセット(treeset)」の要素として使用できます。
1。コンパレータと比較可能は同じです
それらはすべてJavaインターフェイスであり、カスタムクラスのサイズを比較するために使用されます。
カスタムクラスとは:パブリッククラスの人などのような{文字列名; int age}。
Person1、person2、person3を含むそのようなパーソナリストがある場合、私たちはcollections.sort(personlist)を使用します。
期待される結果は得られません。誰かがこの時点で尋ねなければなりません、なぜ私たちは文字列リストを並べ替えることができるのですか:
たとえば、stringlist {"hello1"、 "hello3"、 "hello2"}、collections.sort(stringlist)は正しいソートを取得できます。
文字列オブジェクトは、比較可能なインターフェイスの実装に役立つため、私たちの人がソートしたい場合は、コンパレータも実装する必要があります。
2。コンパレータと比較可能な違い
同等
同等のクラス内で定義されています。
パブリッククラスのペルシオンは、同等の{..人のサイズを制定します...}、
コンパレータが実装されているため、私たちの人は現在、サイズを比較できるオブジェクトになりました。その比較関数は文字列とまったく同じであり、人が異なるサイズを持っているため、いつでもどこでも比較できます。 collections.sort(personlist)は正しい結果を得ることができます。
コンパレータ
コンパレータは人の外で定義されます。現時点では、私たちの人クラスの構造は、変更を変更する必要はありません。
パブリッククラスの人{文字列名; int age}、次に、別のコンパレータを定義します。
public PersonComparatorはComparator()を実装しています{..人のサイズ...}、 PersonComparatorの2人のサイズを比較する方法。したがって、この方法を使用して、パーソンリストを並べ替えたいときは、
パスパスパーソリストに加えて、パーソンコンパレーターも合格する必要があります。なぜなら、人のサイズを比較する方法はPersonComparatorであるため
次のような実装
collections.sort(personlist、new PersonComparator())。
3。比較の例と比較可能
同等:
同等のインターフェイスを実装するには、比較方法をオーバーライドする必要があります。比較方法に比較を実装してください:
パブリッククラスの人は、比較可能な{string name; int age; public int compareoto(and other){int i = 0; i = name.compareto(another.name); //文字列を使用した比較if(i == 0){//名前が同じ場合、年齢を比較し、年齢を返す年齢-1 age;} else {return i; //名前は異なり、名前を比較した結果を返してください。}}}この時点で、collections.sort(personlist)で直接並べ替えることができます。
コンパレータ:
コンパレータの実装には、比較方法を無効にする必要があります。
public class person {string name; int age;} class personcomparatorはComparator <serpuration> {public compare(iners one、person other){int i = 0; i = one.name.compareto(another.name); //文字列を使用した比較if(i == 0){//名前が同じ場合、年齢を比較して、return return one.age -auther.age;} else {return i; //名前は異なり、名前を比較した結果を返してください。}}} collections.sort(personlist、new personcomparator())ソートすることができます4:要約
どちらの方法にも独自の利点と短所があります。同等の使用は簡単です。同等のインターフェイスを実装するオブジェクトが同等のオブジェクトになる限り、
ただし、ソースコードを変更する必要があります。コンパレータを使用する利点は、ソースコードを変更する必要がないことですが、コンパレータを実装することです。カスタムオブジェクトを比較する必要がある場合、コンパレータとオブジェクトを一緒に渡してサイズを比較できます。コンパレータでは、ユーザーは複雑で一般的なロジックを自分で実装できるため、比較的単純なオブジェクトに一致させることができます。これにより、多くの反復労働を節約できます。