Java-->Comparator接口compare方法比较排序

本文通过剑指Offer32题引入,探讨Java中的Comparator接口及其compare方法。介绍了Comparator作为函数式接口如何结合Lambda表达式简化代码,并解释了compare方法的返回值逻辑。同时提到了Comparable接口,说明了许多类如BigDecimal、Long等实现了Comparable接口,允许对这些类型进行强制排序。文章通过示例展示了使用Comparator接口进行自底向上连接排列找最小值的过程,尽管效率较低,但不失为一种解决问题的方法。

说到这个接口得从剑指offer32题开始,我就想直观方法,全排列问题,虽然慢,其他方法再看。。以前就知道这个接口,这不刷题实在不行了,想起他了🤣🤣,进入正题,
在这里插入图片描述
可以发现他注解是函数式接口,那函数式编程加lamba表达式,就简单了,
其中这个方法int compare(T o1, T o2);根据官方介绍可知,

a negative integer, zero, or a positive integer as the
* first argument is less than, equal to, or greater than the
* second.
这就不用我翻译了吧都看到懂,看不懂cv 百度翻译,就是小于0–>第一个参数o1小于第二个参数o2、等于零 o1等于o2 大于0就是~~ ·不用说了(注意是值)

这就不得不提Comparable接口了,只有一个compareTo方法,返回值解释跟上面一模一样的···,你会发现好多类实现了他,如图BigDecimal,包装类Long,Boolean.Integer等等其他,也就是对这些类型可以强制排序
在这里插入图片描述
在这里插入图片描述

所以这个题理解为自底向上连接排列找最小,也就是每相邻两个排列去最小的 如:

  • 332 323 当然323,所以32顺序在3前面,
  • 接着32321 32132 所以321顺序在32前面
  • 合起来答案就是321 32 3
    在这里插入图片描述
    代码如下就搞定了
package niuke;
import java.util.ArrayList;
/**
 * @Author tdragon.
 * @Date 2021/4/14.
 * @Time 20:32
 * @Description:  全排列问题 输入一个正整数数组,把数组里所有数字拼接
 * 起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
 * 则打印出这三个数字能排成的最小数字为321323。
 */

public class JZ32 {
   
   
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值