Comparable

Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。

此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:

packagejava.lang;import java.util.*;public interface Comparable{public intcompareTo(T o);

}

T表示可以与此对象进行比较的那些对象的类型。

此接口只有一个方法compare,比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

现在我们假设一个Person类,代码如下:

。。

现在有两个Person类的对象,我们如何来比较二者的大小呢?我们可以通过让Person实现Comparable接口:

public class Person implements Comparable{

String name;intage;public Person(String name, intage)

{super();this.name =name;this.age =age;

}publicString getName()

{returnname;

}public intgetAge()

{returnage;

}

@Overridepublic intcompareTo(Person p)

{return this.age-p.getAge();

}public static voidmain(String[] args)

{

Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};

System.out.println("排序前");for(Person person : people)

{

System.out.print(person.getName()+":"+person.getAge());

}

Arrays.sort(people);

System.out.println("\n排序后");for(Person person : people)

{

System.out.print(person.getName()+":"+person.getAge());

}

}

}

Comparator

Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。该接口定义如下:

packagejava.util;public interface Comparator{intcompare(T o1, T o2);booleanequals(Object obj);

}

注意:1、若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。

2、int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。

现在假如上面的Person类没有实现Comparable接口,该如何比较大小呢?我们可以新建一个类,让其实现Comparator接口,从而构造一个“比较器"。

public class PersonCompartor implements Comparator{

@Overridepublic intcompare(Person o1, Person o2)

{return o1.getAge()-o2.getAge();

}

}

public classPerson

{

String name;intage;public Person(String name, intage)

{super();this.name =name;this.age =age;

}publicString getName()

{returnname;

}public intgetAge()

{returnage;

}public static voidmain(String[] args)

{

Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};

System.out.println("排序前");for(Person person : people)

{

System.out.print(person.getName()+":"+person.getAge());

}

Arrays.sort(people,newPersonCompartor());

System.out.println("\n排序后");for(Person person : people)

{

System.out.print(person.getName()+":"+person.getAge());

}

}

}

Comparable和Comparator区别比较

Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。而Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

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

两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。

java compar_Java中Comparable和Comparator相关推荐

  1. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  2. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  3. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  4. Java中Comparable和Comparator实现对象比较

    Java中Comparable和Comparator实现对象比较 目录 一. Comparator 二. Comparable 三.比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ...

  5. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  6. Java 中 Comparable 和 Comparator 比较

    为什么80%的码农都做不了架构师?>>>    本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...

  7. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序

    本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...

  8. Java中Comparable和Comparator区别小结

    阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...

  9. Java中Comparable与Comparator的区别

    一.概述 Comparable和Comparator都是用来实现集合中元素的比较.排序的. Comparable是在集合内部定义的方法实现的排序,位于java.util下. Comparator是在集 ...

  10. Java中Comparable和Comparator接口的区别

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u010859650/article/details/85009595 Comparable 简介 Comparable 是排序 ...

最新文章

  1. 斯坦福大学李飞飞团队图像分类课程笔记
  2. 【干货】深入B端SaaS产品设计核心理念
  3. LeetCode(9) - Palindrome Number
  4. C++primer第九章 顺序容器 9.3 顺序容器操作
  5. C++中string::find()函数和string::npos函数的使用
  6. 要看方兴东的博客 只能上Google去找他
  7. Java学习笔记之设计模式(4)适配器模式
  8. 制造业数字化转型的启明星——低代码开发平台
  9. 计算机中反三角函数怎么算,计算器怎么算反三角函数?
  10. 满满干货!邮储银行java面试
  11. demo:纳税计算器
  12. SQLite 查询得到今天日期
  13. 六. 先有鸡还是先有蛋?--SLAM
  14. CCF: 201409-1-相邻数对(C++)
  15. 新百家姓出来了,看你排第几位?
  16. 对计算机应用领域的CAE,我对CAE的了解和想要进行研究的方面
  17. Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述
  18. TeXstudio编译提示缺少.sty文件
  19. 什么时候用重定向,什么时候用请求转发。
  20. 汇编——十进制数据输入转二进制/十六进制输出(含数字判断,不限位数)

热门文章

  1. java程序员自荐信_【程序员英文的自荐信】程序员优秀员工自荐信
  2. 道哥亲笔:谈谈为什么要做弹性安全网络
  3. 小程序-仿微信通讯录-字母导航
  4. 特斯拉神器-TeslaMate
  5. 族谱程序php,族谱系统
  6. matlab 发音,MATLAB,MATLAB language,音标,读音,翻译,英文例句,英语词典
  7. 开源webrtc服务器对比
  8. 微信号,手机号,邮箱验证格式
  9. 爬取汽车之家所有车型,价格,配置
  10. Matlab画出漂亮的三维散点图