欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

comparable接口和comparator接口的区别

程序员文章站 2022-04-17 11:20:25
...
list集合在实现排序功能时,需要实现comparable接口,如果list中的对象没有数值字段,那么就不需要实现该接口,因为string类本来就已经实现了comparable接口,因此String类型的值,本身就具有可比性,可以直接比较大小。然而数值类没有实现comparable接口,因此数值类需要比较大小,需要实现comparable接口:
   实体类实现comparable接口,重写父类的comparaTo方法,这样数值类型就实现了排序功能,因此就可以使用Collections.sort(list)就可以实现数值上的排序。
例如:
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());
   }
}

这样的话,Student对象就实现了数值排序,在外部就可以直接调用Collections.sort(list)直接对age进行排序。
   如果在实体类外面实现list的排序,那么外部类就需要事先Comparator接口,实现compara方法,自定义排序规则,然后使用Collections.sort(list, comparator)实现list集合的排序,其中comparator就是排序规则,
例如:
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());
  }
}