Java中Comparable和Comparator实现对象使用sort方法排序

1,概要说明:
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
2,使用说明:
1)implements Comparable<Student>   重写public int compareTo(Student o)方法

@Override
    public int compareTo(Student o) {
        return  this.id - o.id ;  //调用Arrays.sort() 默认排序Id 从小到大排序
    }  
    public int compareTo(Student o) {
        return  o.id - this.id ;  //调用Arrays.sort() 默认排序Id 从大到小排序
    }  


详见:https://www.jianshu.com/p/b90ff410af62
2)implements Comparator<Student>   重写public int compare(Student o1, Student o2) 方法
升序

if(o1.id>o2.id)
                    return 1;
                else if(o1.id<o2.id)
                    return -1;
                else
                    return 0;
//降序
                if(o1.id>o2.id)
                    return -1;
                else if(o1.id<o2.id)
                    return 1;
                else
                    return 0;


名字升序,--对象属性为字符串时,通过compareTo比较,具备字符串的所有属性

if(o1.name.compareTo(o2.name)>0)
                    return 1;
                else if(o1.name.compareTo(o2.name)<0)
                    return -1;
                else
                    return 0;


详见:https://blog.csdn.net/Hello_Peter_Chan/article/details/84246978
3,排序原理(二叉树排序算法)
拿出一个作为根节点,再拿出元素先从根节点比较,如果小于根节点,左子树为空,则为根节点左子树;如果大于根节点,右子树为空,则为右子树。(如果比较中左右子树不为空,再与左子树或者右子树比较,一直递归)最后对二叉树进行中序遍历。

4,Arrays.sort和Collections.sort实现自定义排序时基本相同,分为两种:
1)被排序的元素自身实现了Comparable接口
2)被排序的元素没有实现Comparable接口,自定义比较器Comparator类作为输入参数输入
 -- class   compareToo构造器类
Arrays.sort(stu,new compareToo());
Collections.sort(list,new compareToo());
区别:
Collection.sort是给List<T>进行排序,而Arrays.sort是给数组进行排序。
详见:https://www.jianshu.com/p/53cc95a4eea7

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值