comparable接口和comparator接口的区别

list集合在实现排序功能时,需要实现comparable接口,如果list中的对象没有数值字段,那么就不需要实现该接口,因为string类本来就已经实现了comparable接口,因此String类型的值,本身就具有可比性,可以直接比较大小。然而数值类没有实现comparable接口,因此数值类需要比较大小,需要实现comparable接口:
实体类实现comparable接口,重写父类的comparaTo方法,这样数值类型就实现了排序功能,因此就可以使用Collections.sort(list)就可以实现数值上的排序。
例如:
[color=blue]public class Student implements Comparable<Student>(){
private String name;
private Integer age;
省略get和set方法

@override
public int comparaTo(Student s){
return this.getAge().comparaTo(s.getAge());
}
}[/color]
这样的话,Student对象就实现了数值排序,在外部就可以直接调用Collections.sort(list)直接对age进行排序。
如果在实体类外面实现list的排序,那么外部类就需要事先Comparator接口,实现compara方法,自定义排序规则,然后使用Collections.sort(list, comparator)实现list集合的排序,其中comparator就是排序规则,
例如:
[color=blue]public class ComparatorStudent implements Comparator<Student>(){
public static void main(){
Student s = new Student();
list.add(s);
...
Comparator comparator = new ComparatorStudent();
Collections.sort(list, comparator);
...
}

@override
public int compara(Student s1, Student s2){
return s1.getAge().comparaTo(s2.getAge());
}
}[/color]
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页