156

重複の可能性:
compare()とcompareTo()
の違いJava:ComparableとComparatorの実装の違いは何ですか?

ComparableとComparatorの主な違いは何ですか。

どのシナリオでどちらが他よりも優先されますか?

ありがとう

更新-例との良いリンク!!

http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

4

2 に答える 2

207

クラスがComparableを実装する場合、クラスのcompareToメソッドはそのオブジェクトの「自然な」順序を定義します。そのメソッドは、そのオブジェクトの他のメソッドと一致するように契約上義務付けられています(ただし、要求されていません)。たとえば、.equals()比較がtrueを返す場合、オブジェクトには常に0が返される必要があります。

コンパレータは、2つのオブジェクトを比較する方法の独自の定義であり、自然な順序と一致しない可能性のある方法でオブジェクトを比較するために使用できます。

たとえば、文字列は通常アルファベット順に比較されます。したがって、"a".compareTo("b")はアルファベット順の比較を使用します。文字列の長さを比較したい場合は、カスタムコンパレータを作成する必要があります。

要するに、大きな違いはありません。それらは両方とも同様の手段の終わりです。一般に、自然順序に匹敵するものを実装し(自然順序の定義は明らかに解釈の余地があります)、他の並べ替えや比較のニーズに対応するコンパレータを作成します。

于 2010-11-05T18:09:52.290 に答える
145

Comparator制御できないタイプのカスタム比較ロジックを提供する方法を提供します。

Comparable実装しているオブジェクトを比較する方法を指定できます。

明らかに、クラスを制御できない場合(または、制御できるオブジェクトを比較するための複数の方法を提供したい場合)は、を使用しますComparator

それ以外の場合は、を使用できますComparable

于 2010-11-05T17:52:41.270 に答える