ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Comparable和Comparator的区别

2019-02-21 12:43:04  阅读:236  来源: 互联网

标签:Comparable Comparator 区别 int 接口 compareTo 比较


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

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

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

   注意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;
    }
}

标签:Comparable,Comparator,区别,int,接口,compareTo,比较
来源: https://www.cnblogs.com/stamp/p/java_base.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有