Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。可以把Comparable理解为内部比较器,而Comparator是外部比较器,基本的写法如下:

class Apple implements Comparable{

int id;

double price;

public Apple(int id, double price) {

this.id = id;

this.price = price;

}

public int compareTo(Apple o) {

//return Double.compare(this.getPrice(),o.getPrice());

if (Math.abs(this.price-o.price)<0.001)

return 0;

else

return (o.price-this.price)>0?1:-1;

}

@Override

public String toString() {

return "Apple{" +

"id=" + id +

", price=" + price +

'}';

}

}```

class AESComparator implements Comparator{

public int compare(Apple o1, Apple o2) {

if (Math.abs(o1.price-o2.price)<0.001)

return 0;

else{

return (o1.price-o2.price)>0?1:-1;

}

}

}

实现了Comparable接口的类需要实现compareTo()方法,传入一个外部参数进行比对,实现了Comparator接口的方法需要实现compare()方法,对外部传入的两个类进行比较,从而让外部方法在比较时调用。

两者的区别是实现Comparator接口代码更加灵活,可以定义某个类的多个比较器,从而在排序时根据实际场景自由调用,而Comparable接口实现后便不能改动。

总结:

comparator接口:真正要实现的只有compare()方法,需要单独准备出一个类来实现comparator接口,这个类将作为指定类的排序类

public int compare(Emp o1,Emp,o2){

return o1.id - o2.id

}

这是说如果o1的id - o2的id是正数就升序,如果负数降序。如果0就剔除

>0 升序

<0降序

=0 重复,不记录

comparable接口

实现该类接口不需要重新创建一个排序的类,使用接口compareble接口排序,只要重写里面的compareTo()方法

Collections类是一个包装类,它包含有各种有关集合操作的静态方法。就像一个工具类。

Collections.sort()

sort()排序方法,根据元素的自然排序对指定列表按升序进行排序

public static void sort(List list,Comparator<>),根据指定比较器产生的顺序对指定列表进行排序,此列表内的所有元素都必须可使用指定的比较器相互比较

参数:list——要排序的列表

C——确定列表顺序的比较器

java 比较器comparator_Java中比较器的使用Compare和Comparator相关推荐

  1. java 比较器comparator_Java比较器之Comparable 和 Comparator

    前言 好久没写博客了,今天研究了一下jdk的比较器,想着随手写个博客吧. Comparable 首先介绍一下java.util.Comparable这个接口,该接口只有一个方法:/** @param ...

  2. java的两种比较器

    比较算法 日常生活中,如果想比较两个数的大小,可采用做差的方式,做差结果的正负可用来判断两个数的大小.假设A - B = C 若整数C > 0,说明 A > B ; 若整数C = 0,说明 ...

  3. JAVA常用类之比较器、System、BigInteger

    本文目录 JAVA常用类 Java比较器 `Comparable`接口 定制排序`java.util.Comparator` System类 BigInteger与BigDecimal JAVA常用类 ...

  4. 比较器Comparable(内部比较器)和Comparator(外部比较器)

    比较器Comparable(内部比较器)和Comparator(外部比较器) 1.使用Comparable是从实体类中直接继承Comparable接口,并且重写compareTo方法. 2.使用Com ...

  5. treeset比较器_Java TreeSet比较器()方法与示例

    treeset比较器 TreeSet类的compare()方法 (TreeSet Class comparator() method) comparator() method is available ...

  6. treemap比较器_Java TreeMap比较器()方法与示例

    treemap比较器 TreeMap类的compare()方法 (TreeMap Class comparator() method) comparator() method is available ...

  7. compare用法java_Java中的Compare和Comparator的使用方法

    Java中的Compare和Comparator的使用方法 发布时间:2020-05-23 09:24:06 来源:亿速云 阅读:358 作者:Leah 如何使用Java中的Compare和Compa ...

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

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

  9. java 8 stream中的Spliterator简介

    文章目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Spl ...

最新文章

  1. opencv颜色空间缩减
  2. 用 rpm-ostree 数据库检查更新信息和更新日志的方法
  3. 获取元素到页面顶部的距离_jQuery 操作元素综合案例
  4. 【机器学习】K-Means算法的原理流程、代码实现及优缺点
  5. c# 数组中的空值_译 | 你到底有多精通 C# ?
  6. arcgis公里坐标转经纬度_高德api交通态势爬取及可视化利用 python+arcgis
  7. 2000 ~2019 年历届 CVPR 最佳论文汇总
  8. DDD领域驱动实践记录
  9. 使用Javascript递归遍历本地文件夹
  10. 记录下最近使用到的sql语句
  11. 机器学习基石HOW部分(1)
  12. TestNG官方文档中文版(1)-介绍
  13. java中class.forName和classLoader加载类的区分
  14. 汉字在字库中的偏移地址计算、显示方法
  15. 三大框架 —— 持久层框架MyBatis
  16. SMAIL 语法大全(Dalvik 虚拟机操作码)
  17. discuz 模板php,Discuz 模板语句分析及知识技巧
  18. vb外部调用autocad_VB调用AutoCAD.ppt
  19. lms算法的verilog实现_基于FPGA和LMS算法的系统建模
  20. Excel使用技巧:合并单元格如何分组排序

热门文章

  1. python银行家算法代码_避免死锁的银行家算法C++程序实现
  2. Missing space before value for key 'path'vue.js解决空格报错
  3. 01-CoreData 概述
  4. Expandable Table的Demo
  5. iOS调用系统相机文字改为中文
  6. 人的原罪、本我和超我
  7. Android -- Annotation(注解)原理详解及常见框架应用
  8. luasocket 安装记录 (FS1.6)
  9. AME_Oracle自带AME审批链详解AME Standard Handler(概念)
  10. Java中数据存储方式