クラスはComparator<jm45>
の代わりに実装しComparable<jm45>
ます。
AComparator
は2つのオブジェクトを比較するComparable
方法を知っています-aは別のオブジェクトをそれ自体と比較する方法を知っています。
sort()
(2番目の引数として)使用するにはコンパレータを渡す必要があるか、値が比較可能である必要があります。
Comparable
代わりにインターフェースを使用するバージョンは次のとおりです。
import java.util.*;
class Test implements Comparable<Test>
{
private int x;
Test(int input)
{
x = input;
}
public static void main(String args[])
{
List<Test> list = new ArrayList<Test>();
list.add(new Test(2));
list.add(new Test(2));
Collections.sort(list);
}
public int compareTo(Test other)
{
return x - other.x;
}
}
Comparator
そして、これがインターフェースを使用するバージョンです:
import java.util.*;
class TestComparator implements Comparator<Test>
{
public int compare(Test t1, Test t2)
{
return t1.getX() - t2.getX();
}
}
class Test
{
private int x;
Test(int input)
{
x = input;
}
int getX()
{
return x;
}
public static void main(String args[])
{
List<Test> list = new ArrayList<Test>();
list.add(new Test(2));
list.add(new Test(2));
Collections.sort(list, new TestComparator());
}
}
クラスがそれ自体のために実装するのを止めることは何もありませんがComparator<T>
、そうすることは少し奇妙です。たとえば、通常、1つの文字列に、他の2つの文字列を相互に比較するように依頼することはありません。元の文字列自体とは何の関係もありません。