本帖最后由 黑马张英涛 于 2013-1-28 10:15 编辑
相减是可以的。两个元素比较只有大于、小于、等于三种关系。而在compare方法里则是通过分别返回
正数、负数、0来表示这种关系。用相减的方法能表现出这种关系,但是条件是比较的元素必须支持减法操作。
一个简单的例子:
public class MyTest {
/**
*
* @param args
*/
public static void main(String[] args) {
Student s1=new Student("abc",77);
Student s2=new Student("bdc",65);
Student s3=new Student("abe",65);
Student s4=new Student("cac",90);
List<Student> list=new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
for(Student s : list){
System.out.println(s.name+":"+s.score);
}
System.out.println("=============================");
Collections.sort(list, new MyComparator()); //按照比较器指定的方式排序
for(Student s : list){
System.out.println(s.name+":"+s.score);
}
}
}
class Student {
public String name;
public int score;
public Student(String name,int score){
this.name=name;
this.score=score;
}
}
class MyComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
if(o1.score==o2.score) //如果分数相等就按照名字比较的反序
return -o1.name.compareTo(o2.name);
else
return o2.score-o1.score; //按照分数大小的反序比较
}
}
|