Java List排序问题

List的排序主要通过两种方法:
1. 要排序的对象model实现Comparable接口
2. 自定义一个比较器,然后调用Collection的sort()方法

有一个核心点要明白,不管那种比较方式,其实都是调用了jre中已经存在的类型的比较方法。什么意思呢?假如有一个User类,我想按姓名排序,其实核心是调用了String的compare()方法。
明白了这一点之后,我们来看看这两种方法分别是怎么实现的。

1. model实现Comparable接口

public class User implements Comparable<User>{

    private int id;
    private String name;
    private String password;// 这个字段暂时没用,先保留
    private String amArrangement;
    private String pmArrangement;
    private boolean isTop;

    //java bean 略

    @Override
    public int compareTo(@NonNull User user) {
        return this.name.compareTo(user.getName());
//        return user.getName().compareTo(this.name);//如果这样写顺序就会反过来
    }
}
// 排序.注意是Collections不是Collection
Collections.sort(userList);

2. 使用比较器

public class StringComparator implements Comparator<User> {
    @Override
    public int compare(User user1, User user2) {
        return user1.getName().compareTo(user2.getName());
    }
}
// 排序
Collections.sort(userList, new StringComparator());

两种方法的比较

相对而言我更喜欢第二种方式,更加灵活,可以动态改变排序的方式,而第一种一旦写好之后就只有一种排序方式了。同时我个人认为排序的方式并不属于model应该完成的任务,第二种方式更加符合软件设计的责任链模式。

ps:从今天开始准备慢慢地把之前写在本地的博客整理修订一下,然后迁移到CSDN上来,给自己定个任务:每天一篇吧。
加油小伙子!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值