Comparable和Comparator的区别

2019-02-21 06:39:25来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

   Comparable 和 Comparator 都是接口,均为比较器

   Comparable相当于“内比较器”,而Comparator相当于“外比较器”

   实现Comparable的类,该类就具有自身比较的功能;Comparator的实现,是一个外部比较工具器 

   注意Comparable 和 Comparator 同时实现时,则以Comparator为主

 

 Comparable 接口

  Comparable 被认为是内比较器,也是自然排序,实现该接口的类,会有自身比较的功能,则依赖compareTo方法的实现

  CompareTo方法的返回值是int,有三种情况:     

      1、比较者大于被比较者,那么返回正整数

      2、比较者等于被比较者,那么返回0

      3、比较者小于被比较者,那么返回负整数

// Comparable 接口的定义
public interface Comparable<T> 
{
    public int compareTo(T o);
}

  例子:String 本身就以实现Comparable ,所以可以调用它的compareTo方法进行比较

class Person implements Comparable{
  // 其他属性  
    @Override
    public int compareTo(Person p){
          int temp = this.age - p.age;
          return temp == 0 ? this.name.compareTo(p.name) : temp;          
    }
}

 

 Comparator接口

  Comparator 被认为是外比较器,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口覆盖compare(T o1, T o2)方法,即可,然后通过这个比较器对类进行比较且排序

  compare(T o1, T o2)方法,int返回值有三种情况:

    1、o1大于o2,返回正整数

    2、o1等于o2,返回0

    3、o1小于o3,返回负整数

  有两种场景可以使用实现Comparator接口的方式:

    1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较

    2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是如他所愿 

  例子:

public class PersonComparator implements Comparator<Person>
{
    @Override
    public int compare(Person p1, Person p2)
    {
     int temp = p1.getName().compareTo(p2.getName);
        return temp == 0 ? p1.getAge() - p2.getAge() : temp;
    }
}

原文链接:https://www.cnblogs.com/stamp/p/java_base.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:由dubbo服务禁用system.gc而引起的思考

下一篇:Spring系列之——spring security