Java中自定义比较器
Java中自定义比较器
- 1、数组比较器
- 2、集合比较器
- 3、自定义类比较器
今天写算法题的时候需要用到数组排序,而且是自定义的,这块知识欠缺,就进行了相应的资料查询。
以我自己的理解,Java中自定义比较器有三种
1、数组比较器
数组比较器用到了Arrays的工具类,此类中提供了许多静态方法,其中sort是默认升序,并且我查看了sort的源代码,使用的是快速排序:
快速排序相信大家都不陌生,这里不再多说了。
刚才说到sort默认是升序,如果我们想要降序呢?
Arrays提供了自定义实现排序,就是自己重新实现Comparator(下面要解释)
Arrays.sort(arr, new Comparator<Integer>() { // arr是数组名,<>中是待排序集合所包含的数据类型@Overridepublic int compare(int a, int b){ // 待排序集合中的元素是什么数据类型,这里的两个函数参数就定义为什么数据类型return a - b; 升序// return b - a; 降序// a - b > 0 交换ab位置,反之不变, 即返回值为正数时,交换数组中正在比较的//两个元素的位置,返回值为负数时,不交换。 }})
但是我看大家的写法用到了lambda表达式(JDK8新特性),更加简洁了
lc406:
public int[][] reconstructQueue(int[][] people) {//贪心//两个维度,先按身高排序,再按大的身高的k插入//按身高排序Arrays.sort(people,(a,b) ->{if (a[0] == b[0]) {return a[1] - b[1]; //升序}else {return b[0] - a[0]; //降序}});LinkedList<int[]> queue = new LinkedList<>();for (int[] p : people) {queue.add(p[1],p); //根据k插入,也即是下标}return queue.toArray(new int[people.length][]);}
2、集合比较器
在数组中使用Arrays作为工具类,在集合中的工具类为Collections
原理其实都一样。
3、自定义类比较器
上面讲到的都是java自身的数据类型包装类,如果我们自己定义的类需要比较的话,我们有两种方法:
- 实现Comparable接口
- Comparator接口
1、实现Comparable接口必须实现comparaTo(Object obj)方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小
class Goods implements Comparable {private String name;private double price;//按照价格,比较商品的大小@Overridepublic int compareTo(Object o) {if(o instanceof Goods) {Goods other = (Goods) o;if (this.price > other.price) {return 1;} else if (this.price < other.price) {return -1;}return 0;}throw new RuntimeException("输入的数据类型不一致");}//构造器、getter、setter、toString()方法略
}
2、
使用Comparator时需要实现compare方法,也即是我们上面Arrays.sort所用到的。
源码中只有一个compare类
@FunctionalInterface :函数式接口,意思是接口中不能再添加其他的类;
Goods[] all = new Goods[4];
all[0] = new Goods("War and Peace", 100);
all[1] = new Goods("Childhood", 80);
all[2] = new Goods("Scarlet and Black", 140);
all[3] = new Goods("Notre Dame de Paris", 120);
Arrays.sort(all, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Goods g1 = (Goods) o1;Goods g2 = (Goods) o2;return g1.getName().compareTo(g2.getName());}
});
Java中自定义比较器相关推荐
- java中自定义比较器_Java中的比较器:自定义规则!!!
比较器 Java语言中的比较器分为两种: Comparable比较器:Comparable是排序接口:若一个类实现了Comparable接口,就意味着"该类支持排序".(作用在实体 ...
- Java中自定义注解的使用
Java中自定义注解的使用 一般来说,市面上有一些的框架,企业都不会直接拿过来就用,通过会做二次开发或封装,为了更加适配自己的开发规范和业务.那么在封装或适配的过程中,自定义注解就起着比较重要的作用. ...
- java自定义外部接口_如何使用可外部化的接口在Java中自定义序列化
java自定义外部接口 在上一篇文章"用示例介绍的有关Java序列化的一切"中 ,我解释了如何使用以下方法序列化/反序列化一个对象 Serializable接口,还说明了如何使用w ...
- 如何使用可外部化的接口在Java中自定义序列化
在上一篇文章"用示例介绍的有关Java序列化的一切"中 ,我解释了如何使用以下方法序列化/反序列化一个对象 Serializable接口,还说明了如何使用writeObject和r ...
- java中自定义设置cookie(设置同父域解决跨域获取值得问题)
1.先在web环境下任意地方获取request,response,session,备用 ServletUtils.java import java.io.IOException; import jav ...
- Java 中的比较器
所谓的比较器指的就是进行大小关系的确定判断,下面首先来分析一下比较器存在的意义 比较器问题的引出 如果要进行数组操作,首先会使用的是 java.util.Arrays 的操作类完成,这个类里面提供有绝 ...
- 谈谈 Java 中自定义注解及使用场景
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:快给我饭吃 www.jianshu.com/p/a7bedc ...
- android自定义比较器,java – 使用自定义比较器排序的集合不起作用
我创建了一个自定义Comparator来对字符串的ArrayList进行排序.我已通过调试器运行它并观察它正确比较和返回值.但是,我的数组没有排序.因为我不熟悉 Java& Android,可 ...
- java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
1.1.1.1: SDK表单 概要说明:我们把流程引擎与表单引擎统称为ccbpm,但是有一些用户并不想使用表单引擎,而是用自己的表单,仅仅使用流程引擎,这样的方式就要采用ccbpm的sdk表单开发模式 ...
- java中自定义输入数字格式_Java 创建并使用自定义数字格式、35;###、####.#####和语言环境...
import java.util.*; import java.text.*; /* nowjava - 时代Java 提 供 */ public class DecimalFormatDemo { ...
最新文章
- 服务运行一段时间,redis缓存就不可用,原来是这个锅!
- Docke的WEB管理工具
- 谈谈android反编译和防止反编译的方法
- 前端传值后端接收不到_web前端和后端哪个好
- WCF中的ServiceHost初始化两种方式(宿主)
- [转载]理解OAuth 2.0
- 你的特斯拉Model 3,只需要一台手机就能偷走它
- html5站点是什么意思,html5是什么意思(html5是什么技术)
- iTextSharp 使用详解
- 方差分析 交互效应和无交互效应
- 大规模定制有哪些标志性的特点
- hivesql uv
- 卸载安装office2013、office2016遇到的问题 - 错误1402,安装程序无法打开注册表项。
- iVMS-4200 Vs区别_高中和大学的这些区别虽鲜为人知,却字字有据,句句真实
- 通过图片像素计算图片大小的方法
- 拼多多校招-----六一儿童节(python)
- excel电子表格插件_电子表格的美好时光
- 中心极限定理-纯理解无公式
- 用Python一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
- 静态电影网站模板A(html+css+js)
热门文章
- 计算机Numlock键的功能,电脑开机numlock灯不亮怎么办 NumLock数字锁定键方法
- 故障:笔记本开机时自动打开 NumLock 键
- 什么叫状态服务器 博客,pending是什么意思?HTTP Status pending (进程信号的未决状态)详解...
- 公共DNS服务器IP地址
- 全球与中国纳米铝硅合金粉末市场深度研究分析报告
- UE4 虚幻引擎,光照系统。BP_Sky_Sphere 白天黑夜效果
- 广告牌定时器怎么设置时间_广告牌定时器时间到了灯箱不亮怎么回事?
- (啤酒,红酒,白酒,料酒)豆瓣(剁椒)鲫鱼做法记录
- c语言中fabs是什么意思,c语言fabs是什么意思_后端开发
- debug——生成log