目录

Comparable接口

Comparator接口(比较器)

Comparable接口和Comparator的比较

总结


Comparable接口

作用:实现对引用数据类型的比较和排序
使用:待比较类实现接口并且覆写接口中的compareTo方法
实例:

public class Person {private String name;//姓名private int age;//年龄public Person(String name,int age) {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;}@Overridepublic String toString() {return "姓名:" + name + " 年龄:" + age; }
}

对于上述的Person类,现在有四个实例化对象,现在要对这四个实例化对象通过使用Comparable接口按照年龄或者其他属性进行排序,那么就需要Person类实现Comparable接口并且覆写compareTo方法:

public class Person implements Comparable<Person> {....@Overridepublic int compareTo(Person o) {//return o.age - this.age;    //降序排列return this.age - o.age;      //升序排列}
}

测试:

public class ComparableTestDrive {public static void main(String[] args) {Person[] person = new Person[4];person[0] = new Person("huahua",18);person[1] = new Person("niuniu",19);person[2] = new Person("manage",28);person[3] = new Person("shuaishuai",17);Arrays.sort(person);System.out.println(Arrays.toString(person));}
}
//输出:(年龄升序)
//[姓名:shuaishuai 年龄:17, 姓名:huahua 年龄:18, 姓名:niuniu 年龄:19, 姓名:manage 年龄:28]

Comparator接口(比较器)

Comparator也可用于引用数据类型的排序,相对于Comparable接口有自己独特的优势,Comparator和Compareable接口的比较写在第三部分。

对于上述的Person类,如果使用Comparator接口来实现按年龄或者其他属性来进行排序,可以不用再去操作Person类,而只需要在使用排序方法的时候使用匿名内部类实现其中的compare方法,会发现这种比较方法实现的排序不用再依赖于待比较的类型,实现了比较和对象类型的解离,这样即使再使用非自定义类时,也可以通过该接口实现期望的数据排序。
测试(不用操作Person类):

public class ComparableTestDrive {public static void main(String[] args) {Person[] person = new Person[4];person[0] = new Person("huahua",18);person[1] = new Person("niuniu",19);person[2] = new Person("manage",28);person[3] = new Person("shuaishuai",17);Arrays.sort(person, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {//return o2.getAge() - o1.getAge();//降序排列return o1.getAge() - o2.getAge();//升序排列}});System.out.println(Arrays.toString(person));}
}
//输出(按年龄升序的结果):
//[姓名:shuaishuai 年龄:17, 姓名:huahua 年龄:18, 姓名:niuniu 年龄:19, 姓名:manage 年龄:28]

Comparable接口和Comparator的比较

字面含义的区别

  • Comparable以able结尾,更代表着一种功能,例如上述的Person类在实现Comparable接口后可以理解为Person类的对象之间具有了比较的功能
  • Comparator意为比较器,更像一种用于比较的工具或者说是比较的参与者。

用法的区别

  • 使用Comparable接口来实现对象之间的比较或者排序,就必须在对象对应类中实现Comparable接口并且覆写compareTo方法
  • 使用Comparator接口来实现对象的排序,可以使用匿名内部类在排序类的外部实现Conparator接口并且重写compare方法

应用场景区别

  • 使用Comparable接口实现排序,必须对排序类的内部进行操作
  • 使用Comparator比较器接口可以实现比较对象和比较器的解离,在类的外部通过匿名内部类进行对象间的比较

总结

Comparable和Comparator接口都可以用于自定义对象之间的比较排序,不同的是,使用Comparable接口必须操作比较类,需要覆写compareTo方法,这样当使用第三方提供的类进行对象的排序时,就很难进行操作;而使用Comparator接口可以不用再操作比较类而通过匿名内部类覆写compare方法实现比较对象的排序。所以Comparable更像是“对内”进行排序的接口,而Compator比较器实现了与比较类d额解耦,在不修改比较类的同时实现排序,因此更像是“对外”提供排序的接口。

Comparable和Comparator接口相关推荐

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

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

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

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

  3. java compareable接口_Java对象比较-Comparable和Comparator接口使用

    最近在学习贪心算法和动态规划的过程中,里面有一段自然排序的操作,顺便简单了解一下Java中对象比较后排序要使用的两个接口:Comparable和Comparator.如果是数字,直接比较就行,但是如果 ...

  4. 使用Comparable、Comparator接口实现对对象数组、List集合自定义排序

    1.实现对象数组排序 (1)方法一,需要排序的对象所属的类实现Comparable接口,复写 comparaTo方法  (2)方法二,需要排序的对象所属的类已经完成无法实现Comparable接口,这 ...

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

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

  6. Comparable和Comparator接口是干什么的?列出它们的区别。

    ava提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象. Java提供了包 ...

  7. Comparable和Comparator接口时干什么的?列出它们的区别

    一.对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compare ...

  8. 比较器(Comparable与Comparator接口)

    有错之处,希望大家可以指出来,谢谢. 文章目录 概念 Comparable接口 Comparable接口实现注意:接口的实现位置要在类所在的位置,比如此类是Worker类那么Comparable接口要 ...

  9. 【Java】Comparable和Comparator接口

    活动地址:CSDN21天学习挑战赛 ✨博客主页: XIN-XIANG荣 ✨系列专栏:[Java SE] ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. Comparable接口 1. C ...

最新文章

  1. ISME:西农沈锡辉+韦革宏+王瑶揭示细菌铁获取和外膜囊泡招募新机制
  2. php mysql update 返回_php mysql_query增删改查(update delete insert)返回值类型
  3. 【数据库实验课堂】实验三:管理SQL Server表数据
  4. mysql ip比较大小_MySQL优化/面试,看这一篇就够了
  5. Python和它高大上的插件们
  6. facebook加密货币项目_Facebook数字货币:Libra的起源—加密货币(比特币)
  7. Sicily 1029. Rabbit 解题报告
  8. 我如何学习:不要停下学习的脚步
  9. Windows 无法访问\\196.168.206.xx,你的计算机配置似乎是正确的,但该设备无法访问的问题解决
  10. uva 1328(kmp)
  11. QT-程序依赖打包-windeployqt方式(简述版)
  12. usb声卡驱动_艾肯iCON ProDrive第三代USB声卡驱动全新发布!
  13. 基尔霍夫定律(Kirchhoff laws)
  14. 什么是搜索引擎?搜索引擎有哪些?
  15. 移动互联网创业:美国不代表全球
  16. 基于MATLAB的一维条码二维码识别
  17. Codeforces 300D Painting Square 题解
  18. 使用Blinker+ESP8266接入天猫精灵
  19. 可以用api控制的电源开关_一种穿戴式系统电源控制器设计与实现
  20. 念整数:你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si

热门文章

  1. 软件系统安全性测试列表(Checklist)
  2. Java安装环境变量
  3. 写给认真学习却进步缓慢的大一学生
  4. fuse接口用法说明
  5. 互联网年终奖出炉,腾讯多个核心G,10个月打底,华为人均分红47.6w,虾皮 B绩效0.5个月,网友:羡慕哭了!...
  6. easyx的使用(2)
  7. 【NOIP 2016 提高组】蚯蚓
  8. PHP弹出对话框的方法
  9. 计算机与汽车智能信息化管理,谈计算机控制系统在汽车行业的应用
  10. 华为设备配置策略路由命令