web-dev-qa-db-ja.com

Java:比較可能と比較器

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

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

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

ありがとう

更新-例との良好なリンク!!

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

138
daydreamer

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

Comparator は、2つのオブジェクトを比較する方法の独自の定義であり、自然順序付けと一致しない方法でオブジェクトを比較するために使用できます。

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

つまり、大きな違いはありません。それらは同様の手段の両端です。一般に、自然順序に匹敵するものを実装し(自然順序の定義は明らかに解釈に対して開かれています)、他のソートまたは比較のニーズに対応するコンパレータを記述します。

182
Andy

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

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

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

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

128
Justin Niessner