您的类实现Comparator<jm45>
而不是Comparable<jm45>
.
AComparator
知道如何比较两个对象 - AComparable
知道如何将另一个对象与自身进行比较。
您要么需要传入一个比较器以供sort()
使用(作为第二个参数),要么这些值必须是可比较的。
这是一个使用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>
为自己实现,但这样做有点奇怪。例如,您通常不会要求一个字符串将另外两个字符串相互比较——这与原始字符串本身无关。