Java6.0中Comparable接口与Comparator接口详解
说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者都吃饱撑着没事做吗?
再谈Comparator接口之前,大家应该先了解一个叫“策略模式”的东东。一下是百度百科对策略模式的描写:
之所以要谈到策略模式,就是因为Comparator接口其实就是一种策略模式的实践。实现Comparator接口的类必然就会实现一个compareTo(Object o1, Object o2)的方法,而这个方法就是算法中的一部分,所有使用了compareTo方法的类都不会关心compareTo是如何工作的,只关心他的返回值,这也是面向对象中著名的封装特性。
那Comparator接口应该如何使用呢?别急,首先我们要先对Person类进行一下处理,因为我们现在使用Comparator接口,所以Comparable接口就可以光荣的退休了:
1: public class Person {
2:
3: private String name;
4: private int age;
5:
6: public Person() {
7:
8: }
9:
10: public Person(String name, int age) {
11: this.name = name;
12: this.age = age;
13: }
14:
15: public String getName() {
16: return name;
17: }
18:
19: public void setName(String name) {
20: this.name = name;
21: }
22:
23: public int getAge() {
24: return age;
25: }
26:
27: public void setAge(int age) {
28: this.age = age;
29: }
30:
31: @Override
32: public String toString() {
33: return "Person [age=" + age + ", name=" + name + "]";
34: }
35:
36: }
新建一个实现Comparator的实现类PersonComparator:
1: import java.util.Comparator;
2:
3: public class PersonComparator implements Comparator<Person> {
4:
5: @Override
6: public int compare(Person p1, Person p2) {
7: if (p1.getAge() > p2.getAge()) {
8: return 1;
9: } else if (p1.getAge() < p2.getAge()) {
10: return -1;
11: }
12: return 0;
13: }
14:
15: }
然后再用回我们的CompareTest做测试:
1: import java.util.Arrays;
2:
3: public class CompareTest {
4:
5: public static void main(String[] args) {
6: Person[] persons = {
7: new Person("P1", 60),
8: new Person("P2", 20),
9: new Person("P3", 40)
10: };
11:
12: System.out.println(Arrays.toString(persons));
13:
14: Arrays.sort(persons, new PersonComparator());
15:
16: System.out.println(Arrays.toString(persons));
17: }
18:
19: }
注意:在上面的sort方法中,我们传进了一个PersonComparator的实例对象作为参数,读者也可以试试不传入这个参数,看是否能正确工作。
结果当然是跟上面演示的例子一样啦,我就不再重复了
Java6.0中Comparable接口与Comparator接口详解相关推荐
- Java中的冒泡排序,Comparator接口和Comparable接口的简单使用
冒泡排序 冒泡排序是一种常见的排序方法,按照一定的规则(比如从小到大或者从大到小的顺序)对一组数据进行排序.而在Java开发中,也经常用到冒泡排序.我们就以下面的一个例子来讲解冒泡排序算法. 给定一个 ...
- Java基础之Comparable接口和Comparator接口的比较
前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...
- Comparable接口和Comparator接口
目录 1 介绍 2 Comparable接口 3 Comparator接口 4 总结 1 介绍 有这样2个人,一个人光头,一个人有黑色头发,现在不允许染发,只允许光头的带假发,理由是有头发的人没有必要 ...
- Comparable接口和Comparator接口的比较
1.Comparable详解 1.1Comparable概述 来自java.lang.Comparable.Comparable是 排序接口.若一个类实现了Comparable接口,就意味着该类支持排 ...
- 深入理解 Comparable 接口和 Comparator 接口以及Arrays.sort()
compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable<T>接 ...
- Comparable接口和Comparator接口的使用和区别
Comparable Comparable接口在JDK8中的源码: package java.lang; import java.util.*;package java.lang; public in ...
- Java创建comparator对象,Java Comparable 和 Comparator 的详解及区别
Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. C ...
- STM32接口FSMC/FMC难点详解
STM32接口FSMC/FMC难点详解 转载 http://blog.sina.com.cn/s/blog_808bca130102x94k.html STM32F767的FMC将外部存储器划分为 ...
- php支付宝接口参数错误,php支付接口_php支付宝支付接口程序及参数详解
摘要 腾兴网为您分享:php支付宝支付接口程序及参数详解,作业盒子,智能互联,智联招聘,小番茄等软件知识,以及雷电游戏中心,天气预报软件,live电视直播,otcbtc,手机街机,lq-630k驱动 ...
最新文章
- LeetCode 873. 最长的斐波那契子序列的长度 题目详解
- 判断页面是否加载完成
- HTML---百度新闻轮播图--定位练习
- DNN 汉化中的问题????
- 一个不错的游戏 - flash webgame
- 有哪些命令行的软件堪称神器?
- Java web后端1 XML URI与URL HTTP Tomcat
- element table 怎么知道点击的是第几行_el-data-table, 让CRUD更简单??
- v4l2 框架下如何设置分辨率_【微学习】低压计量电表如何设置?(下)
- sklearn常用函数(更新中)
- win32常用文件操作
- linux系统python的版本怎么升级,python---linux下升级python的版本
- 微信服务号菜单栏跳转网页配置方法(非接口写法)
- U3D DotH教程2
- 崩坏三精准池python模拟
- sap LICENSE KEY和 ACCESS KEY 破解
- C# 根据传入的字符串生成拼音码,包含全码和简码
- OpenStack裸金属使用总结
- Vue开发中实用的文件下载(仅包括视频下载和图片下载)
- (笔记)飞行当中使用的各种速度
热门文章
- C#学习笔记(C#与C++的差异)001
- Servlet架构初解析
- [洛谷P5057][CQOI2006]简单题
- charles: 使用小结
- 使用ADO.NET操作数据库
- MySQL之一致性检测及数据同步
- DDD CQRS架构和传统架构的优缺点比较
- 什么是Activity 和 Activity分类
- java 项目初始化一个定时任务_elastic-job 分布式定时任务框架 在 SpringBoot 中如何使用(一)初始化任务并定时执行...
- smarty模板引擎_3-预保留变量