2

いくつかの記事を経て、コレクションについてある程度理解しました。
しかし、collections.sort() メソッドを実装する場所と、同等のインターフェイス (compareTo() およびコンパレータ インターフェイス (compare())) を使用する必要がある場所を混乱させています。

これと別の参照オブジェクトを比較するための同等のインターフェイスですが、2 つのオブジェクトを比較するためのコンパレーターです。

メソッドを使用する必要がある状況を正確に知りたいですか?

ありがとう、

4

4 に答える 4

2

実装しないでくださいCollections.sort()。このメソッドはJava に組み込まれています。を指定せずにそのメソッドを呼び出して、自然順序Comparator並べ替えます。それ以外の場合は、 の方法でソートするために aを指定します。ComparableComparatorComparator

javadocsに示されているように、クラスに自然な順序付けがある場合は、クラスにメソッドを実装Comparableして提供する必要があります。例は と で、確かに自然な数学的順序付けがあります。compareToComparableIntegerDouble

ComparatorオブジェクトのクラスをソートできないComparable場合や、自然順序付けに代わる順序付けを提示したい場合、または自然順序付けがない場合に順序付けを行いたい場合は、実装するクラスを作成する必要があります。例として、自然順序を逆にすることがあります (たとえば、降順で最大から最小に並べ替えます)。Personもう 1 つの例は、複数のフィールドを持つデータオブジェクトで、複数のフィールドで並べ替え可能にする必要がfirstNameありlastNameます。ComparatorlastNamefirstName

于 2013-04-08T22:41:43.547 に答える
0

Comparator は、クラス内のオブジェクトを昇順で並べ替えたい場合にのみ使用されると思います。クラスの ID を昇順で並べ替えるために使用されます。1 つのフィールドに基づく相互排他的な並べ替えは、別のフィールドに基づく並べ替えを自動的に除外します。

于 2014-01-10T18:07:04.753 に答える
0

Comparator は、比較したいクラスのコードにアクセスできない場合に意味があります。たとえば、String のカスタム コンパレータを実装する必要がある場合があります。

独自のカスタム オブジェクトのリストを並べ替える必要がある場合は、インターフェイス Comparable を実装するように記述します。

于 2013-04-08T22:40:49.960 に答える