Comparable和Comparator的区别

Comparable(自然排序): java.lang包下的一个接口,只有一个方法compareTo
String,Integer等都实现该接口所以使用Collections.sort()可以进行自然排序,某个对象想进行排序的可以实现该接口:

public class MyComparable implements Comparable<MyComparable> {

    private int count;

    public MyComparable(int count) {
        this.count = count;
    }

    public MyComparable() {
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    @Override
    public int compareTo(MyComparable o) {
        return o.getCount() - this.getCount();
    }

根据count的进行排序,代码是降序排列,升序可调换对象位置实现:

 List<MyComparable> comparables = new ArrayList<>();
        MyComparable comparable = new MyComparable(1);
        MyComparable comparable2 = new MyComparable(2);
        MyComparable comparable3 = new MyComparable(3);
        MyComparable comparable4 = new MyComparable(4);
        MyComparable comparable5 = new MyComparable(5);
        comparables.add(comparable);
        comparables.add(comparable4);
        comparables.add(comparable3);
        comparables.add(comparable2);
        comparables.add(comparable5);
        Collections.sort(comparables);
        System.out.println("Collections sort ========================================");
        for (MyComparable myComparable : comparables) {
            System.out.println(myComparable.getCount());
        }

使用Comparable如果想改变排序规则,需要修改实体类,不够灵活!对于这点我们可以使用Comparator这个工具类来代替
Comparator(定制化排序) java.util包中的接口 顾名思义它是一个工具可以看做是第三方 使用的是一种策略模式,可以不用需改被排序类的结构实现定制化排序

public class MyComparator implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }

    public static void main(String[] args) {
        String str1 = "a";
        String str2 = "b";
        MyComparator comparator = new MyComparator();
        TreeMap<String, String> treeMap = new TreeMap(comparator);
        treeMap.put(str2, str2);
        treeMap.put(str1, str1);
        for (Map.Entry<String, String> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + "\t" + entry.getValue());
        }
    }

总结

Java排序有两种:

  1. Comparable(自然排序)需要在实体类实现
  2. Comparator(定制化排序)无需修改实体类,直接调用(一般使用匿名类)示例:
Comparator comparator = new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return 0;
            }
        };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值