对象的比较--Comparable接口和Comparator接口的使用

来源:互联网 发布:淘宝店铺装修毕业设计 编辑:程序博客网 时间:2024/05/22 14:03

实现对象之间的比较通常有两种办法:
1.实现Comparable接口,这种方法比较简单。因为Comparable接口中只定义了一个方法:compareTo()
使需要比较的对象实现Comparable接口并覆盖compareTo()方法:

public class User implements Comparable
    @Override    public int compareTo(Object o) {        User other = (User)o;        return this.age - other.age;    }

如上方法所示:比较对象age的大小作为判断对象大小的依据。
2.虽然实现Comparable接口的方法比较简单,但是缺乏灵活性。比如,如果在排序的时候,如果集合A中的User对象需要按照age排序,而集合B中的User对象需要按照id排序,就难以实现。
因此可以使用Comparator接口:
分别定义两个类,实现Comparator接口:

public class UserComparatorById implements Comparator<User>{    @Override    public int compare(User o1, User o2) {        return o1.getId()-o2.getId();    }}
public class UserComparatorByAge implements Comparator<User>{    @Override    public int compare(User o1, User o2) {        return o1.getAge()-o2.getAge();    }}

在测试方法里:

public class Test {    public static void main(String[] args) {        User user1 = new User(1,"John",24,new Date());        User user2 = new User(2,"John",20,new Date());        User user3 = new User(3,"John",25,new Date());        List<User> list = new ArrayList<User>();        list.add(user1);        list.add(user3);        list.add(user2);        Collections.sort(list, new UserComparatorById());        System.out.println("---sort by id---");        for(User u : list){            System.out.println(u);        }        Collections.sort(list, new UserComparatorByAge());        System.out.println("---sort by age---");        for(User u : list){            System.out.println(u);        }    }}

输出结果:

---sort by id---User [id=1, name=John, age=24, birthday=1430142616520]User [id=2, name=John, age=20, birthday=1430142616520]User [id=3, name=John, age=25, birthday=1430142616520]---sort by age---User [id=2, name=John, age=20, birthday=1430142616520]User [id=1, name=John, age=24, birthday=1430142616520]User [id=3, name=John, age=25, birthday=1430142616520]

这样便可以根据情况灵活地选择比较器进行排序。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 爱奇艺缓存视频显示下载失败怎么办 把老公惹生气了怎么办 苹果x用电量太快怎么办 小中考地生没过怎么办 如果遇到不负责的语文老师怎么办 孩子的语文老师教的不好怎么办 刚买的小猫很凶怎么办 2月幼犬不吃东西怎么办 小狗狗不吃狗粮怎么办 母猫不会照顾小猫怎么办 刚买的小狗拉稀怎么办 母兔子吃小兔子怎么办 照片照出来背亮景人是黑的怎么办 手机透明壳变黄了怎么办 ae视频渲染太慢怎么办 3ce口红太干了怎么办 中考误用0.38mm的笔怎么办 ps画笔都锁住了怎么办 削铅笔机坏了怎么办 幼儿园小朋友不听老师话怎么办 孩子在幼儿园不听老师话怎么办 幼儿园大班孩子上课不好好上怎么办 脸上挠了血印子怎么办 大班公开课烫伤了怎么办教案 孩子心理出现了问题该怎么办 幼师打孩子很多家长告怎么办 课堂上纪律不好的学生怎么办 孩子上幼儿园总感冒怎么办 孩子上幼儿园总生病怎么办 台湾人抗拒统大陆人中国人怎么办 如果一年的公休日耍不完怎么办 我一个月要歇三天班怎么办 学校没给报到证怎么办 员工休息一天老板拉着脸怎么办 换工作了报到证怎么办 幼儿园的孩子不写作业怎么办 幼儿园宝宝不写作业怎么办 幼儿园孩子不写作业怎么办 光盘数据面写字了怎么办 娃娃的手断了怎么办 联币金融跑路了怎么办