1.Java比较器的使用背景

Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的
但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
如何实现?使用两个接口中的任何一个:Comparable 或 Comparator

2.自然排序:使用Comparable接口

2.1说明

  1. 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。
  2. 像String、包装类重写compareTo()方法以后,进行了从小到大的排列
  3. 重写compareTo(obj)的规则:
    如果当前对象this大于形参对象obj,则返回正整数,
    如果当前对象this小于形参对象obj,则返回负整数,
    如果当前对象this等于形参对象obj,则返回零。
  4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序

2.2自定义代码举例

public class Goods implements Comparable{private String name;private int price;public Goods() {}public Goods(String name, int price) {this.name = name;this.price = price;}@Overridepublic int compareTo(Object o) {System.out.println("*************");if (o instanceof Goods){Goods goods = (Goods) o;if (this.price> goods.price){return 1;}else if (this.price< goods.price){return -1;}else {//return 0;return -this.name.compareTo(goods.name);}//方式二://return Double.compare(this.price,goods.price);}throw new RuntimeException("传入的数据类型不一致!");}
}

3.定制排序:使用Comparator接口

3.1说明:

1.背景:
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,
那么可以考虑使用 Comparator 的对象来排序
2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2;
如果返回0,表示相等;
返回负整数,表示o1小于o2。

3.2代码举例:

   public void test01() {Person[] people = new Person[7];people[0] = new Person("bb", 68);people[1] = new Person("hh", 38);people[2] = new Person("aa", 580);people[3] = new Person("aa", 68);people[4] = new Person("cc", 28);people[5] = new Person("cc", 8);people[6] = new Person("cc", 18);Arrays.sort(people, new Comparator<Person>() {@Overridepublic int compare(Person o1, Person o2) {if (o1.getName().equals(o2.getName())) {return Double.compare(o1.getAge(), o2.getAge()); //从低到高} else {return o1.getName().compareTo(o2.getName());  //升序}}});System.out.println(Arrays.toString(people));}

4.两种排序方式对比

  • Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小
  • Comparator接口属于临时性的比较。

Java比较器-学习相关推荐

  1. java 集合框架、迭代器、比较器 学习笔记

    java集合框架总览 接口.实现类.算法的定义 常见的集合接口 Set和List的区别 常见的集合实现类 java.util包中定义的实现类 集合算法的概念 Collection Algorithms ...

  2. Java集合类学习总结

    Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/colum ...

  3. JavaSE10:日期时间类、java比较器、System类、Math类、大数类

    写在前面 常用类的学习结束了,现在就简单整理和通过一些小demo来巩固一下吧~ JDK8.0之前的日期时间类 1. java.lang.System类 System类提供的public static ...

  4. 01 | Java入门级学习指南

    01 | Java入门级学习指南 前言 第一部分:JAVA 设计和编程基础 1.1Java 语言基础 1.2Java 面向对象 1.3Java 核心类库 1.4Java SE实战项目 第二部分:数据库 ...

  5. 这月薪过万的Java高级学习资料,难得一遇的干货,不下载真可惜了!

    大家有没有想我呢 不管你们想不想我 我挺想你们的 通过昨天我不断的 死气白咧各种说好话 最终 要到了Java学科的Java集合学习资料 里面包含视频+资料+源码 堂兄也有一个愿望 希望你们月薪过万后 ...

  6. Java笔记(学习中。。)

    Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...

  7. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  8. java基础学习_IO流03_字符流、IO流小结、案例_day21总结

    java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...

  9. day04--java高级编程:API:Object、String,Buffer、包装类、日期、java比较器、BigInteger、进制、length区别,IO流,路径,序列化id,编码

    1 API 1.1 Api文档下载 1.API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口,一切可以调用的东西都是API. ...

  10. java基础学习-6

    Java基础学习-6 双列集合 Map的常见API Map的遍历方式 HashMap 小练习 LinkedHashMap TreeMap TreeMap--小练习1 TreeMap--小练习2 Tre ...

最新文章

  1. Scrapy框架----pipeline---------数据保存EXCEL
  2. [云炬创业基础笔记]第七张创业团队测试7
  3. oracle .ctl 是什么文件_Oracle误删dual表怎么办?这里教你怎么恢复
  4. ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行
  5. 【中国好公司】中国人最向往的公司:BAT相差太多!华为排名出乎意料
  6. 【Elasticsearch】如何在生产中执行Elasticsearch的零停机升级
  7. Java机器学习开发库
  8. knex 单表查询_sql 单表查询练习
  9. 极其艰难地下了决心建立博客虽然没有很好的理由或者仅仅是因为觉得自己的确要改变了......
  10. python rgb565_RGB565的转换
  11. 用python做生日礼物_地产大佬潘石屹把学习Python当作生日礼物送给自己
  12. zoc7 下载和使用指南 连接远程主机
  13. Vijos - 想越狱的小杉(最短路)
  14. 达人评测 n5095和i3 10110u选哪个
  15. 佛山Uber优步司机奖励政策(12月21日到12月27日)
  16. cad2010背景怎么调成黑色_板绘初学者上色灰暗怎么解决?做好明暗关系上色没烦恼!...
  17. 八一农垦计算机专业咋样,黑龙江八一农垦大学(专业学位)计算机技术考研难吗...
  18. 移动端h5页面微信一键登录
  19. OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇
  20. 自我、职业、人生的思考

热门文章

  1. mysql做时间判断_mysql关于时间函数的判断
  2. Java中如何删除文件呢?
  3. 咚咚咚————【Matlab】单片机读取摄像头回传的RGB数组绘制图片
  4. [转]Android TV 遥控器适配
  5. 严蔚敏数据结构习题第七章
  6. Jetson Nano 读取 GPS数据(TTL转 USB)
  7. java三级分销_java版微信三级分销完整源码
  8. 信息安全工程师学习笔记《第一章》
  9. 真实可靠的Python清屏命令
  10. 零基础必看的Linux入门教程 (AcWing)