美文网首页
提示十四

提示十四

作者: 飞絮搅青冥 | 来源:发表于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接口

相关文章

  • 提示十四

    今天来看提示十四:考虑实现Comparable接口。 与本章讨论的其他方法不同, compareTo 方法并没有在...

  • 温馨提示(十四)

    1、爱自己的人,脸上散发的光芒是骗不了别人的。他会活在平静、淡定、喜悦中;绝少埋怨、鲜有不满、没有太多话需要澄清、...

  • 提示三十四

    提示三十四:使用枚举类型替代整型常量。 作者先介绍了int和String枚举模式,他们有着很多缺点,然后就引出了枚...

  • 提示23-24估算

    今天继续学习本书估算的相关内容,涉及了提示二十三和二十四。 提示二十三:通过估算来避免,意外。提示二十四:根据代码...

  • 提示四十四

    提示四十四:优先使用标准的函数式接口。。 有了lambda之后,模板方法(Template Method)模式就没...

  • 提示二十四

    今天来看提示二十四: 优先考虑静态成员类。 作者上来就介绍了四种嵌套类:静态成员类,非静态成员类,匿名类和局部类。...

  • 提示44-48 解耦

    今天学习有关解耦的内容,先看提示: 提示四十四:解耦代码让改变更容易。提示四十五:只管命令不要询问。提示四十六:不...

  • 提示五十三、五十四

    提示五十三:慎用可变参数。 如果可变参数要求至少要求一个参数的话,可以使用这种样式。 在重视性能的情况下,因为可变...

  • 【连载】平行世界丨第十五章 对抗异兽的战争

    前情提示: 第十四章 误入鬼族时空[https://www.jianshu.com/p/462343c72ed9]...

  • 那一切都不是真的

    时间:2021年正月十四地点:郑州/开封本文主旨:郑州雪景/开封灯展友情提示:来不及阅读文字的,可直接看图。 20...

网友评论

      本文标题:提示十四

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