内部比较器Comparable

一个类实现了Comparable接口,那么它就有了一个内部比较器,实现了Comparable的类可以调用Collections工具类或Arrays的sort方法进行比较

外部比较器Comparator

一个类实现了Comparator接口,那么它就是一个外部比较器,我们可以看到在集合对象的sort方法里,需要传入一个外部比较器对象。

两者区别

大多数情况下,我们用到的类都是已经封装好的类,无法进行修改,也就是无法更改其内部构造器的规则,这时候我们需要一个外部比较器来实现我们自己想要的比较规则。当我们自己写的类就可以用内部比较器,之前我看到一篇文章讲的很好,自定义类用内部比较器可以达到高内聚,因为这个比较规则只有这个类才能用。
不过如果这个自定义类在很多种场合具有不同的比较规则,比如在计算成绩时用成绩属性比较,在统计年龄时,用年龄属性比较,这时候就可以用外部比较器了,内部构造器通过一个标志位也可以区分什么时候用哪种规则,但是太麻烦了,不如外部比较器简单明了。

        //定义一个数组aInteger[] a = new Integer[]{5,4,3,2,1};Arrays.sort(a);for(int i=0;i<5;i++)//输出结果是1,2,3,4,5,可以看到integer内部比较器是从小到大进行排序System.out.println(a[i]);//这时候我们想让数组里的排序规则变为降序,定义一个外部比较器,定义我们自己的规则Arrays.sort(a, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {int x1 = (int)o1;int x2 = (int)o2;if(x1>x2)return -1;else if(x1<x2)return 1;else return 0;}});for(int i=0;i<5;i++)//输出结果是5,4,3,2,1System.out.println(a[i]);

JAVA两类比较器的区别(Comparable,Comparator)相关推荐

  1. java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别

    对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo() ...

  2. c++和java的类转换的区别

    转自:http://club.topsage.com/thread-265349-1-1.html Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同: (1)Java比C++程 ...

  3. js的对象和java的类的简单区别

    记一个面试题.如题 java是面向对象的,也就是有继承,封装,多态. js是基于对象的,也就是说没有上述三点.js的继承等是通过原型链或其他方法进行实现的,es6的class本质上还是对象,和java ...

  4. java的类和接口区别_Java接口和类的区别

    一.概述 定义 Comparable是在集合内部定义的方法实现的排序的接口,位于java.util下. Comparator是在集合外部实现的排序的接口,位于java.lang下. Comparabl ...

  5. Jmeter下载Binaries和Source两类包的区别说明

    下载Jmeter包,在下载页面会有2种下载分类,一个是Binaries,一个是source,如下图: 一般开放原代码软件都会有两个版本发布: Source Distribution 和 Binary ...

  6. 下载Jmeter经常有Binaries和Source两类包的区别

    下载Jmeter包,在下载页面会有2种下载分类,一个是Binaries,一个是source,如下图: 一般开放原代码软件都会有两个版本发布: Source Distribution 和 Binary ...

  7. Java中Colletcions.sort方法详解以及Comparable和Comparator两个接口的区别

    在应用Collections工具类的sort方法时,一般有两种使用方式: //将集合中元素按照默认规则排序. public static <T> void sort(List<T&g ...

  8. Java通用工具类之按对象属性排序工具类

    本工具类为按对象属性排序工具类,实现的功能: 1.按对象的一个属性和多个属性进行排序. 2.按对象属性正序和倒序排列. 3.完美支持int等基础类和Integer等包装类. 4.完美支持属性为实现了C ...

  9. Java常用类(3)--Java比较器Comparable、Comparator类

    文章目录 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable Comparable接口强行对实现 ...

最新文章

  1. UIButton防止按钮和手势的暴力点击
  2. centos 宝塔面板 mongodb 给新的数据库 创建登录用户和密码
  3. java 页面输出一个页面_java学习之:一个完整页面输出信息的过程(以输出Doctor表中信息为例)...
  4. petshop4.0 详解之三(PetShop数据访问层之消息处理) [转]
  5. Centos 6.2 单网卡安装pptpd 经验
  6. 关于 Eureka 2.x,别再人云亦云了!
  7. 博弈论——Nim游戏
  8. 《集异璧》作者侯世达:王维、杨绛与机器翻译的本质
  9. 西刺代理python_python网络爬虫实战——实时抓取西刺免费代理ip-Go语言中文社区...
  10. 方舟生存进化秘籍大全
  11. 【C语言01】用二维数组实现最简单的三子棋游戏
  12. Docker学习总结
  13. CDN 技术研究——Cache集群通信
  14. 大学英语综合教程一 Unit 4 课文内容英译中 中英翻译
  15. Vultr VPS如何修改root密码
  16. 【MFC/C++操作word】Word篇(OLED/COM)
  17. javascript--浅谈函数与闭包
  18. 柠萌影视再次冲刺港股:年营收持续两年下滑​ 腾讯是股东
  19. Servlet项目访问出错怎么办?
  20. 关于Donews的记忆---从从容容走出那段泥沼

热门文章

  1. Android之运行PopupWindow提示Unable to add window -- token null is not valid; is your activity running?
  2. Android studio之编译出现 Error:null value in entry: outputDirectory=null
  3. linux之如何快速查看文件的大小
  4. Android之严苛模式(StrictMode)
  5. 你这飞机会爆炸吗?航空公司含泪甩卖49元机票,却被超模君挖出秘密!
  6. 接好!畅销数学界的科普书,我们免费送!
  7. 如何将手机投屏到电脑_手机如何投屏到电脑上?详细教程看这里,手机投屏
  8. python3多线程queue_Python多线程(3)——Queue模块
  9. 直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊
  10. chrome vue.js插件文档_神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!...