使用Comparable和Comparator接口比较对象
来源:互联网 发布:网络语言 脚本是什么 编辑:程序博客网 时间:2024/05/20 20:02
其实对象比较的接口就这么两个, 了解清楚了什么时候该用哪个心里也就有了谱了,之前不太理解这两个,反正基本上没有将这
两个排序接口分别开,为了应付面试也就背了排序就用这两个接口就行了,至于具体的就没怎么了解过了,其实这是很不应该的
,为什么设计两个接口,自然是因为一个接口不能满足使用,废话说了这么多,接着就说说这两个接口的使用。
Comparable接口使用比较简单,直接使比较对象实现这个接口就行了,然后实现compareTo方法即可实现排序,其实这个接口应该满足
我们开发中的大部分场景。(貌似也就这么一种用法)
@Overridepublic int compareTo(Person o) {return this.getAge() - o.getAge();}
还有一种就是Comparator接口,看其他博客都将Comparator排序接口叫做【外部比较器】,而将Comparable排序接口叫做【内部比较器】,
这么说基本没啥大问题,顾名思义,也就是说Comparable用在排序类的内部,Comparator用在排序类的外部。
就我的理解而言,在什么场景下使用Comparator呐?一般是被比较的对象没有实现Comparable接口,然而又想按照某种我们自定义的规则进行
比较,但是又不能修改那个类本身,Comparator就是适合这种场景,新建一个类实现Comparator接口(如PersonComp),实现compare方法,
排序的时候就可以用:
1.对象数组,用Arrays.sort(people,new PersonComp()); 2.集合,用Collections.sort(people,new PersonComp())
不过这似乎有点麻烦,专门为一个排序写一个类,然后只实现一个方法,大财小用了,没关系,我们还可以用如下这种方式使用Comparator接口
Arrays.sort(people,new Comparator<Person>() {public int compare(Person o1, Person o2) {return o1.getAge()-o2.getAge();}});
对应的people集合就可以用
Collections.sort(people,new Comparator<Person>() {public int compare(Person o1, Person o2) {return o1.getAge()-o2.getAge();}});
另外,其实Comparator也是可以当作【内部比较器】来用的,比如类Person也可以实现Comparator接口,然后实现compare方法,只是在调用
的时候注意也要用对应的Comparator的调用方式才是,比如Arrays.sort(people,new Person())。(people是Person类型的数组,并且实现了Comparator接口)
不过.....既然可以修改排序对象类,干嘛不用Comparable呐?哈哈,所以上述方法有点鸡肋了,不过主要说明的是它也可以这么用而已。
- 使用Comparable和Comparator接口比较对象
- 对象的比较--Comparable接口和Comparator接口的使用
- Comparable和Comparator接口比较
- Comparator比较器和Comparable接口
- Comparable和Comparator之对象比较
- Comparable和Comparator实现对象比较
- Comparable接口和Comparator接口的使用
- Java中实现对象的比较:Comparable接口和Comparator接口
- Java中实现对象的比较:Comparable接口和Comparator接口
- Java中实现对象的比较:Comparable接口和Comparator接口
- 比较Comparable和Comparator
- Comparator和Comparable比较
- comparable和comparator比较
- Comparable和Comparator比较
- Comparator 和 Comparable 比较
- Comparator 和 Comparable比较
- Comparator和Comparable比较
- comparable和comparator比较
- 新零售崛起,大数据助力店铺精准选址!
- UVA
- 美团点评研究院:学生暑假消费趋势大数据报告(附下载)
- Swift修改Alert视图的Title和Message(UILabel)属性
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
- 使用Comparable和Comparator接口比较对象
- 时代正燃 | 全民健身运动意图大数据报告
- 文件路径操作
- 修改Android Studio Build生成apk的默认名称
- NOIP2017总结
- 1075. 链表元素分类(25)
- c的回调函数与java中抽象函数,接口函数,抽象类简单理解
- 关于使用FPGA实现sin波形并读取ROM值得问题
- ElasticSearch5.6.3 安装步骤