Comparator和Comparable的区别使用
来源:互联网 发布:java下载不了 编辑:程序博客网 时间:2024/06/05 18:04
前言
首先,要声明原文出处,原文链接:Comparator和Comparable的区别使用。
其次,我说一下为什么要写或者转载这篇文章。今天在看《尚学堂马士兵java教程》容器一章中,讲到对容器进行排序,是排序类通过实现Comparable的compareTo方法,然后调用Collections.sort方法。但是,我同时又在看《java核心技术》基础篇,万万没想到,书上的示例是实现了Comparator的compare接口,然后调用Collections.sort(List<T>list, Comparator<? super T> c)。第一次接触这块的我当时就蛋疼了,后续就是各种查资料,顺便还复习了一下策略模式。
最后,本来想自己总结一下,没想到google了一篇如此简洁易懂的文章,就直接转载了。
Comparable和Comparator的区别
简单的说:
- 实现Comparable接口可以直接使用sort方法Collections.sort(List list)排序。
- 实现Comparator接口可以用Collections.sort(List list, Comparator c)排序。
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成是一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
- 类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序从而不必改变对象本身。
- 可以使用多种排序标准,比如升序、降序等。
Comparable实例
package coreJavaOne;import java.util.Arrays;public class User implements Comparable<User> { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return this.age; } public String getId() { return this.id; } public void setId(String id) { this.id = id; } public void setAge(int age) { this.age = age; } public String toString() { return "[ id = " + this.id + ", age = " + this.age + "]"; } public int compareTo(User other) { return this.age - other.getAge(); } public static void main(String args[]) { User[] users = {new User("wangzhengyi", 26), new User("bululu", 27)}; Arrays.sort(users); for (int i = 0; i < users.length; i++) { System.out.println(users[i]); } }}
Comparator实例
package coreJavaOne;import java.util.Arrays;import java.util.Comparator;class User implements Comparable<User> { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return this.age; } public String getId() { return this.id; } public void setId(String id) { this.id = id; } public void setAge(int age) { this.age = age; } public String toString() { return "[ id = " + this.id + ", age = " + this.age + "]"; } public int compareTo(User other) { return this.age - other.getAge(); }}public class SampleComparator implements Comparator<User> { /** * 重写接口方法,按照年龄从大到小排序(注意:Comparable示例是按照年龄从小到大排序) */ public int compare(User o1, User o2) { return o2.getAge() - o1.getAge(); } public static void main(String args[]) { User[] users = {new User("wangzhengyi", 26), new User("bululu", 27)}; Arrays.sort(users, new SampleComparator()); for (int i = 0; i < users.length; i ++) { System.out.println(users[i]); } }}
ps:自己改写了Comparator的测试用例,这样对比性更好一些
- Comparator和Comparable的区别使用
- Comparator和Comparable的区别使用
- Comparator和Comparable的区别
- Comparable和 Comparator的区别
- Comparator和Comparable的区别
- comparable和comparator的区别
- Comparable和Comparator的区别
- Comparator 和 Comparable 的区别
- comparable和comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable 和 Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable 和 Comparator 的区别
- cocos2dx最新版本2.2.1相关问题
- SQL删除重复数据只保留一条
- javascript数组元素的添加、删除与插入以及参数数组的使用
- 【Java&Android开源库代码剖析】のAndroid-Universal-Image-Loader-part1
- 写给妹妹的编程札记 4 - 搜索: 迷宫问题 - 深度优先搜索
- Comparator和Comparable的区别使用
- http方法
- 网络中端口的概念
- Dalvik虚拟机简要介绍和学习计划
- myeclipse无法识别cvs的web工程,怎么导入myeclipse中?
- 数组的反转 columList.reverse();
- 银行密码
- 简明Python教程 12)输入输出 13)异常
- WLAN工作频段, MLME, PLME