Comparator和comparable的区别

发布时间 2023-04-17 21:26:51作者: 壹索007

区别:

  comparator接口实际上是出自java.util包,它有一个compare(Object obj1, Object obj2)方法用来排序(比较器)

  comparable接口实际上是出自java.lang包,它有一个compareTo(Object obj)方法用来排序(排序接口)

Comparator定制排序:

  compare方法中调用的是对象实现comparable接口重写的compareTo方法。

// void sort(List list),按自然排序的升序排序
Collections.sort(arrayList);

// 定制排序的用法//降序
Collections.sort(arrayList, new Comparator<Integer>() {
      @Override
       public int compare(Integer o1, Integer o2) {
               return o2.compareTo(o1);
      }
});

Comparable接口:

  重写 compareTo 方法实现按年龄来排序:

// person对象没有实现Comparable接口,所以必须实现,这样才不会出错,才可以使treemap中的数据按顺序排列
// 前面一个例子的String类已经默认实现了Comparable接口,另外其他像Integer类等都已经实现了Comparable接口,所以不需要另外实现了
public  class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * T重写compareTo方法实现按年龄来排序
     */
    @Override
    public int compareTo(Person o) {
        if (this.age > o.getAge()) {
            return 1;
        }
        if (this.age < o.getAge()) {
            return -1;
        }
        return 0;
    }
}

 

总结:

  comparator接口出自java.util包,是一个比较器,它有一个compare(Object o1, Object o2)方法用来排序,compare方法中调用的是对象实现comparable接口重写的compareTo方法。

  comparable排序接口出自java.lang包,它有一个compareTo(Object o)方法用来排序,主要是对象实现comparable接口重写 compareTo 方法实现按某字段排序。