比较器Comparator 和 Comparable的简单区别
2016-03-28 11:12
316 查看
1,简介
最近在刷题的时候需要用到对自定义的类进行排序,于是想到了实现比较器接口,发现有comparator和conparable两个比较器接口,具体分析一下两者的区别。
例如现在有一个自定义的类,
例如
2,比较
(1).Comparator 和 Comparable都是java中的内部比较器接口,都是用来实现对一个自定义的类进行排序
(2). 不同的是实现Comparable接口是定义在类的内部,比较代码需要嵌入类的内部结构中
Comparator 实现在类的外部,单独实现第一个比较器,不需要对原来的类进行结构上的变化,属于无侵入式的。
具体到上面的例子
Comparable<T>内部侵入式实现比较器
Comparator <T>无侵入式实现比较器,只需要单独写一个比较器实现类ScoreComparator
最近在刷题的时候需要用到对自定义的类进行排序,于是想到了实现比较器接口,发现有comparator和conparable两个比较器接口,具体分析一下两者的区别。
例如现在有一个自定义的类,
class Score{ public int score; public int time; public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public Score(int score, int time) { super(); this.score = score; this.time = time; } }如果对一个对象数组进行排序
Score[] score=new Score ; Arrays.sort(score);这样是没法实现的,而对基本的数据类型可以这样排序是因为其都实现了Comparable<T>接口
例如
public final class Integer extends Number implements <strong>Comparable<Integer></strong> { public final class String implements java.io.Serializable, <strong>Comparable<String></strong>, CharSequence {所以这里的Score对象必须先实现自己的比较器才能用上述类似的方式进行排序
2,比较
(1).Comparator 和 Comparable都是java中的内部比较器接口,都是用来实现对一个自定义的类进行排序
(2). 不同的是实现Comparable接口是定义在类的内部,比较代码需要嵌入类的内部结构中
Comparator 实现在类的外部,单独实现第一个比较器,不需要对原来的类进行结构上的变化,属于无侵入式的。
具体到上面的例子
Comparable<T>内部侵入式实现比较器
class Score implements Comparable<Score>{ public int score; public int time; public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } @Override public int compareTo(Score o) { if(this.time>o.time) return 1; else if(this.time==o.time) return 0; else return -1; } public Score(int score, int time) { super(); this.score = score; this.time = time; } }然后在主类中直接比较 Arrays.sort(score);
Comparator <T>无侵入式实现比较器,只需要单独写一个比较器实现类ScoreComparator
class ScoreComparator implements Comparator<Score>{ @Override public int compare(Score o1, Score o2) { if(o1.time>o2.time) return 1; else if(o1.time==o2.time) return 0; else return -1; } }然后在主类中带入比较器类Arrays.sort(score, new ScoreComparator());
相关文章推荐
- Linux date命令
- Android spinner的默认状态的保存
- 推荐系统必读的10篇精选技术文章
- MySQL权限篇之FILE
- excel中如何返回某列中最大长度的单元格的字符数
- [Java] 类中构造器的调用顺序
- 指针的实质
- Linux配置SSH免密码登陆
- 详解收发不畅原因及U-Mail邮件中继解决之道
- JavaWeb项目开发案例精粹-第6章报价管理系统-03Dao层
- MTK 平台Camera 驱动架构
- Python常用的爬虫技巧总结
- 安装WEB_shell开源堡垒机 gateone
- 快速理解Runtime of Objective-C
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- unix下控制字符
- 二十岁出头的时候上,你一无所有,你拥有一切。
- 搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)
- elasticsearch实现搜索拼音然后高亮内容
- HTML基本标记