java 比较器comparator_Java中比较器的使用Compare和Comparator
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相关推荐
- java 比较器comparator_Java比较器之Comparable 和 Comparator
前言 好久没写博客了,今天研究了一下jdk的比较器,想着随手写个博客吧. Comparable 首先介绍一下java.util.Comparable这个接口,该接口只有一个方法:/** @param ...
- java的两种比较器
比较算法 日常生活中,如果想比较两个数的大小,可采用做差的方式,做差结果的正负可用来判断两个数的大小.假设A - B = C 若整数C > 0,说明 A > B ; 若整数C = 0,说明 ...
- JAVA常用类之比较器、System、BigInteger
本文目录 JAVA常用类 Java比较器 `Comparable`接口 定制排序`java.util.Comparator` System类 BigInteger与BigDecimal JAVA常用类 ...
- 比较器Comparable(内部比较器)和Comparator(外部比较器)
比较器Comparable(内部比较器)和Comparator(外部比较器) 1.使用Comparable是从实体类中直接继承Comparable接口,并且重写compareTo方法. 2.使用Com ...
- treeset比较器_Java TreeSet比较器()方法与示例
treeset比较器 TreeSet类的compare()方法 (TreeSet Class comparator() method) comparator() method is available ...
- treemap比较器_Java TreeMap比较器()方法与示例
treemap比较器 TreeMap类的compare()方法 (TreeMap Class comparator() method) comparator() method is available ...
- compare用法java_Java中的Compare和Comparator的使用方法
Java中的Compare和Comparator的使用方法 发布时间:2020-05-23 09:24:06 来源:亿速云 阅读:358 作者:Leah 如何使用Java中的Compare和Compa ...
- Java笔记(学习中。。)
Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...
- java 8 stream中的Spliterator简介
文章目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Spl ...
最新文章
- opencv颜色空间缩减
- 用 rpm-ostree 数据库检查更新信息和更新日志的方法
- 获取元素到页面顶部的距离_jQuery 操作元素综合案例
- 【机器学习】K-Means算法的原理流程、代码实现及优缺点
- c# 数组中的空值_译 | 你到底有多精通 C# ?
- arcgis公里坐标转经纬度_高德api交通态势爬取及可视化利用 python+arcgis
- 2000 ~2019 年历届 CVPR 最佳论文汇总
- DDD领域驱动实践记录
- 使用Javascript递归遍历本地文件夹
- 记录下最近使用到的sql语句
- 机器学习基石HOW部分(1)
- TestNG官方文档中文版(1)-介绍
- java中class.forName和classLoader加载类的区分
- 汉字在字库中的偏移地址计算、显示方法
- 三大框架 —— 持久层框架MyBatis
- SMAIL 语法大全(Dalvik 虚拟机操作码)
- discuz 模板php,Discuz 模板语句分析及知识技巧
- vb外部调用autocad_VB调用AutoCAD.ppt
- lms算法的verilog实现_基于FPGA和LMS算法的系统建模
- Excel使用技巧:合并单元格如何分组排序
热门文章
- python银行家算法代码_避免死锁的银行家算法C++程序实现
- Missing space before value for key 'path'vue.js解决空格报错
- 01-CoreData 概述
- Expandable Table的Demo
- iOS调用系统相机文字改为中文
- 人的原罪、本我和超我
- Android -- Annotation(注解)原理详解及常见框架应用
- luasocket 安装记录 (FS1.6)
- AME_Oracle自带AME审批链详解AME Standard Handler(概念)
- Java中数据存储方式