前者将比较代码嵌入自身类中,而后者在一个独立的类中实现比较(策略模式,类似STL中的函数对象)。
public class Test implements Comparable
{
private int value = 0;
//使用Object,而不是Test,否则不形成对Comparable接口中compareTo方法的实现
public int compareTo(Object obj){
if((Test)obj.value > value){
return -1;
}else if((Test)obj.value == value){
return 0;
}else{
return 1;
}}}
public class MyComparator implements Comparator
public int compare(Object o1,Object o2){
if((Test)o1.value < (Test)o2.value){
return –1;
}else if((Test)o1.value == (Test)o2.value){
return 0;
}else{
return 1; }}
//跟其它Comparator比较,一般不覆盖,直接使用Object的equals方法
public boolean equals(Object obj){ }
}
Test[] tests = new Test[10];
Arrays.sort(tests);
Arrays.sort(tests,new MyComparator());