可比较和比较

时间:2012-02-25 05:45:36

标签: java

  

可能重复:
  Java: What is the difference between implementing Comparable and Comparator?
  When to use Comparable vs Comparator

可比较和比较器接口之间有什么区别? 有人可以通过提供相应的示例来解释我吗?

谢谢

3 个答案:

答案 0 :(得分:3)

这就是拇指规则:

  1. 实现Comparable接口以提供自然顺序。
  2. 使用Comparator,根据您希望的标准对对象集合进行排序。
  3. 所以你有

    注意:以下代码仅用于说明目的,可能无法编译。

    public class Student implements Comparable<Student>{
    
       public int age;
       public String name;
    
       //defined natural ordering is by name
       public int compareTo(Stundent that){
          return this.name.compareTo(that.name);
       }
    }
    
    public class AgeComparator implements Comparator<Student>{
       int compare(Student s, Student t){
          return s.age - t.age;
       }
    }
    

    现在,如果您有Student的列表,例如studentList,则可以使用以下

    Collections.sort(studentList); //sorts by natural ordering; by name
    Collections.sort(studentList, new AgeComparator()); //sorts by age
    

答案 1 :(得分:0)

来自Comparable 上的Java文档:

  

此接口对实现它的每个类的对象强加一个总排序。这种排序称为类的自然排序,类的compareTo方法称为自然比较方法

换句话说,实现Comparable的类能够将自己与同类的其他对象进行比较。

来自Comparator 上的Java文档:

  

比较函数,它对某些对象集合强加total ordering。比较器可以传递给排序方法(例如Collections.sortArrays.sort),以便精确控制排序顺序。比较器还可用于控制某些数据结构的顺序(例如sorted setssorted maps),或者为没有natural ordering的对象集合提供排序。

实现Comparator的类能够将其他对象相互比较。

答案 2 :(得分:0)

对于Comparable<T>,具有T类型的对象自然排序。给定T that,它确定<=之间的关系(>thisthat)。

Comparator<T>T排序。给定两个T,它确定了它们的关系(<=>)。

自然排序类型的示例是Integer。整数的自然顺序为{-MAX_VALUE,...,-101,...,MAX_VALUE}。一个类型只能有一个自然顺序,部分原因是自然顺序的概念需要它是唯一的,部分原因是单个类不能有多个Comperable.compareTo的实现。

另一方面,单个类型可能有几个有意义的Comparator个。例如,String.CASE_INSENSITIVE_ORDER是一个忽略大小写的Comparator<String>