【白白源码俱乐部-由浅入深之比较器】

【白白源码俱乐部-由浅入深之比较器】,第1张

【白白源码俱乐部-由浅入深之比较器】

文章目录

  • 一、什么是 Comparable?什么是 Comparetor?
  • 二、为什么要讲解 Comparable 呢?
  • 总结

一、什么是 Comparable?什么是 Comparetor?那个比较好?

废话不多说,上代码【为了避免刚学习编程的兄弟姐妹们不太懂,因此小白白会尽量介绍的详细一些】:

//  -> 代表泛型类型,也就是说此泛型可以是任意类型的引用类型对象
public interface Comparable { // Comparable 接口
        
        // 此处即是将实现此接口的类指定泛型类型后,将那泛型放置到此处,使得实现此接口的类来重写                            
        // 此比较方法。
        public int compareTo(T o); // 其接口内部只有一个 compareTo 静态方法。
}


// 也许有部分新人并无接触过此类东西,因此这里小白白准备给大家看下实现过此接口的类
// 这里为大家展示一个最最常见的包装类 【Integer implements Comparable】
public final class Integer extends Number implements Comparable {
    
    // 这里可以看到此包装类重写的 compareTo() 方法,不过此处又进行了一次封装,让我们点进去一探
    // 究竟吧
    public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    }


    // 此处即是 compareTo 的实现细节方法了
    public static int compare(int x, int y) {    // 此处传递两个int类型的参数用于底层做比较
        // 可以看到这里就是实现此方法的源码了。
        // 此处运用了一个三元运算符,将传递过来的两个参数做了一个比较
        // 最终返回一个int类型的值。
        // 介:如果第一个参数大于第二个参数,那么将返回 -1;
        // 否则如果两个参数相等则返回 0
        // 最终如果第二个参数大于第一个参数则返回 1

        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }
}

看完上面的源码是不是感觉恍然大悟呐?那么小白白就带领大家用实例来证实一下它的用法吧。

// 此处是自定义的一个 Persion 类,我们让他实现 Comparable 接口
public class Persion implements Comparable { // 此处加上它的泛型类型

    // 此处是一个自定义注解,有需要联系小白白,小白白会写一篇详细的自定义注解文章,此处不做过        
    // 多介绍
    @FieldAnnotation(seqNo = 0000001)
    private int seqNo;

    @FieldAnnotation(name = "小李")
    private String name;

    @FieldAnnotation(wages = 1000000.0)
    private double wages;

    // 因为实现 Comparable 接口时,传递了泛型类因此此处也就只可使用传递的泛型类型
    @Override
    public int compareTo(Persion o) { 
        // 此处想比较引用类型中的那个类都是自己定义的,就像Integer比较的时两个int类型的数据值
        // 此处我们比较工资这个属性
        return this.wages > o.wages ? 1 : (this.wages == o.wages ? 0 : -1); 
        
    }

    public double getWages() {
        return wages;
    }

    public void setWages(double wages) {
        this.wages = wages;
    }
}

class TestComparable{
    public static void main(String[] args) {
        Persion p1 = new Persion();
        p1.setWages(1000);
        Persion p2 = new Persion();
        p2.setWages(5000);

        // 此处比较很明显p1要比p2的工资低因此应返回 -1
        int comp = p1.compareTo(p2);

        System.out.println(comp);
    }
}

执行结果:

 

二、为什么要讲解 Comparable?

这里就需要给大家说一下了,其实小白白也并非乱讲一通,而是因为小白白要讲解的文章都是有关联的,所以此处就不得不说下了,在看小白白发布的下一篇文章之前一定要把这篇文章理解透彻,因为这是为下篇文章打下的基础。

最后大家一定要关注小白白噢!小白白会一直给大家上干货的,绝不会带一丢丢的水货,关注小白白不迷路,白白带你上高速,✌!

总结

其实大家应该是有一些疑惑的,因为小白白上面说了还要讲解另一种比较器 Comparetor 的,这里为什么不做讲解了呐,原因在于小白白觉得这两种比较器根本其实都是一样的,其实大家只要将这个内部比较器理解透之后呐,那么另一个外部比较器也就不用再做过多的讲解了。当然如果有那位小伙伴需要的话也可以私信白白,哪怕有一个人,小白白也不会抛弃你的。

最后呐其实还有一个小小的面试题:

        问:外部比较器【Comparetor】和内部比较器【Comparable】那个比较好?

                个人觉得外部比较器比较好,因为外部比较器的扩展性较高。

                这里可能就会有小伙伴要问了,那白白这里为什么讲解内部比较器呐,白白做一下解释,因为外部比较器比内部比较器用法稍微多那么一些简单来说就是稍微的繁琐一点,白白为了让刚刚踏上这条道路的兄弟姐妹们也可以很好的理解比较器因此就写了怎么一篇内部比较器。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存