关于Comparator接口的compare方法定义升序降序问题
compare(int o1, int o2)方法 return o1 - o2 是升序,return o2 - o1 是降序的原因是什么?
尝试过的解决方式:
sort中的源码没看太懂,麻烦讲解一下
正在回答 回答被采纳积分+1
同学你好,在源码的sort方法中,最终会根据返回值的数值对结果顺序进行排列。这里会有多次方法调用,不建议同学在初学阶段尝试直接阅读源码。
老师这里讲源码的核心原理为同学介绍一下:
Comparator接口的compare方法,最终会通过接口回调的方式,被sort方法的底层所调用。而sort方法会根据compare方法返回的int值来决定是否将参数o1和o2的位置进行互换。
所以在Comparator接口的注释中也尝试描述过规则,当返回值为正整数时,o1会排在o2的前面。当返回值为负整数时,o1和o2的位置会被互换,即o1会排在o2的后面。当返回值为0时,不会对这两个元素进行变更,因为两个元素实际上是相同排列优先级的,前后位置是没有区别的。
那么,我们可以尝试带入数据:
1.如果o1=1,o2=2,那么如果采用o1-o2的排列方式,int值为负数,此时需要将o1和o2的位置进行互换,即顺序为{2,1},也就是降序。
2.如果o1=2,o2=1,那么如果采用o1-o2的排列方式,int值为正数,此时无需将o1和o2的位置进行互换,即顺序为{2,1},也就是降序。
3.如果o1=1,o2=2,那么如果采用o2-o1的排列方式,int值为正数,此时无需将o1和o2的位置进行互换,即顺序为{1,2},也就是升序。
4.如果o1=2,o2=1,那么如果采用o2-o1的排列方式,int值为负数,此时需要将o1和o2的位置进行互换,即顺序为{1,2},也就是升序。
5.如果o1=1,o2=1,由于两者相同,无论采取哪种比较方式,int值都为0,也就不需要排序。
综上可知,在Java中,只是制定了对两个元素位置的放置规则,而我们根据这个规则发现了升序与降序的规律,这些规律是没有直接写在源码的注释中的。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星