此文也是总结,参考了各位博主之后的理解:
Comparable接口和Compatator接口都可以实现排序,那就是:
重写 compareTo(Object obj) 方法的规则(两个对象通过该方法的返回值来比较大小):
如果当前对象this大于形参对象obj,则返回正整数;
如果当前对象this小于形参对象obj,则返回负整数;
如果当前对象this等于参数对象obj,则返回零。
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
升序(默认,即官方定义,毕竟代码实现就是基于这个写的):
< -1
= 0 //或者 1效果是一样的;-1相同元素会发生位置调整
1
降序:
< 1
= 0 //或者 1效果是一样的;-1相同元素会发生顺序调整
-1
倒序:
//直接
return -1;
不改变顺序:
//直接
return 0或者1;
很多人总结了权重的问题:
1是前者权重大,-1是后者。JAVA则按照权重由小到大排序。
这样说法也好理解:
如果当前值<传递过来的值,返回-1,则后者权重大,升序排列
如果想要降序,则需要当前值<传递过来的值返回1,则前者权重大
这样写代码的时候,你只要考虑权重就能得到满足需求
但还有更加精辟的解释:如果返回负数,第一个参数放前面;
按照官方默认来看:
当前值<传递过来的值,返回-1,则返回小的那个数放在前边,这样就是升序排列
同样当当前值>传递过来的值是返回-1的话,大的那个数就在前边,这样就是降序排列了
这样我们不管降序升序只要保证返回是-1的那个条件符合你的需求就行了。
相关文章
暂无评论...