java中Comparator升序降序记忆方法

平时刷算法的时候有时候需要使用到升序降序排序,这个地方我老是会出现记忆错误,死记硬背这个升降序写法,所以这里我讲述一种我自认为比较好的记忆方法。

 前提:这里o1表示位于前面的对象,o2表示后面的对象

实现Comparator接口,必须实现下面这个函数:

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

我们认为:

return 正数 此时表示两个对象需要交换位置

return 负数 此时表示两个对象不需要交换位置

常用的方法是:

升序(asc)

return o1.xxx - o2.xxx;(这里o1表示位于前面的对象,o2表示后面的对象)

升序原因:

首先o1是前面的对象,o2是后面的对象。

如果o1-o2>0,表示此时return 正数,o1,o2需要交换位置,而又因为o1-o2>0,所以o1>o2.

而此时需要交换位置,交换位置后此时o2在o1前面,o2<o1,所以是升序。

如果o1 - o2 <0 ,此时表示return 负数,o1,o2不需要交换位置,而又因为o1- o2<0,所以o1<o2。

因为不需要交换位置,此时o1任然在前面,o2任然在后面,而o1<o2,也是升序的。

因此 return o1.xxx - o2.xxx表示是升序。

降序(desc)

return o2.xxx - o1.xxx;(这里o1表示位于前面的对象,o2表示后面的对象)

降序原因:

首先o1是前面的对象,o2是后面的对象。

如果o2-o1>0,表示此时return 正数,o1,o2需要交换位置,而又因为o2-o1>0,所以o2>o1.

而此时需要交换位置,交换位置后此时o2在o1前面,o2>o1,所以是降序。

如果o2 - o1 <0 ,此时表示return 负数,o1,o2不需要交换位置,而又因为o2- o1<0,所以o2<o1。

因为不需要交换位置,此时o1任然在前面,o2任然在后面,而o1>o2,也是降序的。

因此 return o1.xxx - o2.xxx表示是降序。

警惕点:

这里return o1.xxx - o2.xxx 可能会出现越界的情况,例如 o1.xxx = 2147483646;o2.xxx = -2147483646; 此时相减的话会越界。

因此使用传统方法判断,

例如:

if(a[0]>b[0]){

                    return 1;

                }else if(a[0]<b[0]){

                    return -1;

                }else{

                    return 0;

                }

这样也是升序,其实这里两个对象前后顺序不变即可。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值