Collection中sort排序对于compare重写

前言

        最近学习Collection,学习到对于list排序。对于普通数据的排序我们直接通过sort方法可直接排序,可对于list中存储的是对象,而且对于这个对象的两个属性进行排序。这时我们只能说去通过重写compare进行重写,将排序规则进行改变,从而实现我们所需要的排序。

源码

        我们首先来看下sort方法的源码:

        其中有两个参数,一个是存放数据的list,另一个参数就是规则参数,而对于这个规则,也就是我们需要进行重写的,只有将这个规则进行重写,才可以得到我们想要的排序方式。

        

Comparator

        首先我们先来说下这个Comparator的接口。

        Comparator接口用于对用户定义的类的对象进行排序。

        该接口位于java.util包中,含有两个方法:

                compare(Object obj1,Object obj2)

                equals(Object element)

        与Comparable使用场景不同,Compartor可以对任何对象进行排序

        主要实现在一下场景:

                需要对为实现Comparable接口的类进行比较,排序

                已实现的Co'mparable接口的排序算法不符合要求,需要改写。

总结来说,小C我认为对于排序规则上的应用,还是Compartor实用性更大。

我们先来一个程序需求

        

        对于这种数据,我的第一想法是Collection.sort()直接将List扔进去,然后再reverse()进行倒转,然后我就试了一下。

        然而并不可以,直接编译不通过。

        然后在网上进行查找资料,如何对于泛型对象数据实现倒叙呢?

        给出的答案就是,重写compare。

        对于这部分代码我可以参考这位大佬,使用这部分重写,确实可以做到倒叙排序,起初我还很开心,但是对于返回值为啥是O2的数据-O1的数据呢,让我产生不小的疑问。

返回值含义

        对于这个问题,我查了很久,终于明白了其中的道理。

        理解方式就是:

  • return 0:不交换位置,不排序
  • return 1:交换位置
  • return -1:不交换位置
  • return o1-o2:升序排列
  • return o2-o1:降序排列

        前面的数>后面的数,是降序(从大到小)排列,如果想要改为升序排列,就需要返回1

        前面的数<后面的数,是升序(从小到大)排列,不改变位置就返回-1

        二者相等,不进行交换,也就不排序。

        总结来说,compare其中的规则就是以上所叙述的,大家其实不用在意这个减号,其实可以理解为从O1到O2,O2到O1。后面的数大于前面的,也就是所说的升序,前面大于后面,也就是所谓的将于,稍微抽象理解一下。或者理解参数的位置,O2在前就是降序,O2在后就是升序,其中O2大于O1,其中的顺序就自然而然的显现出来了。

总结

        通过一路的梳理,对于Collection中排序应该没有什么太大问题了,而且这个Compare对于项目中用到的地方还是很多的,一定要掌握差不多,受益很大。我也是程序员小白,不断的摸索,不断的去研究,一些该掌握的还是需要深入研究的。如果其中存在什么问题,欢迎指出,不断的更新,不断的才是进步。

 end

程序员小C

        

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值