美文网首页
提示十四

提示十四

作者: 飞絮搅青冥 | 来源:发表于2022-05-27 22:57 被阅读0次

    今天来看提示十四:考虑实现Comparable接口。

    与本章讨论的其他方法不同, compareTo 方法并没有在 Object 类中声明。 相反,它是Comparable 接口中的唯一方法。 它与 Object 类的 equals 方法在性质上是相似的,除了它允许在简单的相等比较之外的顺序比较,它是泛型的。 通过实现 Comparable 接口,一个类表明它的实例有一个自然顺序(natural ordering)。一下几点是我认为的要点:

    1. 作者强烈推荐(x.compareTo(y) == 0) == (x.equals(y)),虽然这并不是必要的。但是如果没有实现这一点,对于有序集合会有问题。比如BigDecimalcompareToequals方法就不一致,两个对象new BigDecimal("1.0")new BigDecimal("1.000")HashSet(equals)中是不等的,在TreeSet(compareTo)中又是相等的。
    2. 在 Java 7 中,静态比较方法被添加到 Java 的所有包装类中。 在 compareTo 方法中使用关系运算符「<」和「>」是冗长且容易出错的,不再推荐。同时注意不要用+-去比较可能会比较大的数字,比如hashCode。
    3. 在 Java 8 中 Comparator 接口提供了一系列比较器方法,可以使比较器流畅地构建。其中常见的有comparingInt,comparingLong,comparingDouble,书中还介绍了thenComparingInt 和类似的两个方法,这三个方法我倒是以前没有用过,不过一般情况下一次比较排序就够用了,不过为了保险,很多时候也会指定接下来的排序,这时候thenComparing就比较好用了。

    我们系统中关于比较的需求还是很普遍的,以前没有升级jdk8的时候,我就接触了一些,当时是通过guava的库,需要定义很复杂的函数,去实现函数式编程。后来有了java8的支持,相应的开发被大大简化了,但是有些guava的库还是很好用,比如Ordering,再加上java里面原生的Comparator接口的一些支持,我们熟悉以后可以大大简化代码的复杂度。


    comparator接口

    相关文章

      网友评论

          本文标题:提示十四

          本文链接:https://www.haomeiwen.com/subject/lqlbprtx.html