针对Comparator接口实现类进行总结

在做数组排成最小的数算法题时,对重写比较器进行了研究,现在进行总结。
题目https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&&tqId=11185&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  • 小根堆排序

https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-ba-shu-zu-pai-cheng-zui-xiao-de-s-4/492343
JAVA默认是从小到大排序!!!

 Queue<String> queue = new PriorityQueue<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //字典序列小的放在堆顶
                return (o1 + o2).compareTo(o2 + o1);
            }
        });

需要注意的是,尽管是Comparator重写compare方法返回的是int,规则可以自定义,但是返回1说明不交换o1和o2,返回-1则交换。

  • 重写Arrays.sort也可以
Arrays.sort(arr,new Comparator<String>(){
             public int compare(String s1,String s2){
                 if((s1+s2).compareTo(s2+s1)>=0) return 1;
                 else return -1;
             }
         } );
  • 使用lambda表达式重写 (由测试得知这一表达式会导致算法效率变慢!)
 Arrays.sort(arr,(String s1,String s2)->{                       
 //当接口只有一个抽象函数时,用->{}程序块代替定义               
                 if((s1+s2).compareTo(s2+s1)>=0) return 1;
                 else return -1;
             }  );
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值