Java List排序

今天去东莞出差一天,累死了,最近由于要给毕设准备实验数据,开始做一些电池测试的实验,都没什么写代码的时间了,蛋疼。

进入主题

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

有一个核心点要明白,不管那种比较方式,其实最终都是调用了jre中已经存在的类型的比较方法。什么意思呢?假如有一个User类,我想按姓名排序,其实核心是调用了String的compareTo()方法。而String类的compareTo()方法是怎么实现的呢,经过查看源码发现是使用native方法实现的。

明白了这一点之后,我们来看看这两种方法分别是怎么实现的。

1. model实现Comparable接口

public class User implements Comparable<User>{

    private int id;
    private String name;
    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应该完成的任务,第二种方式更加符合软件设计的责任链模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值