第14条 考虑实现Comparable
接口
-
compareTo
方法是Comparable
接口中唯一的方法,允许进行等同性和顺序比较:
将对象与指定的对象进行比较,当该对象小于,等于或大于指定对象的时候,分别返回一个负整数,零或正整数。 -
强烈建议
(x.compareTo(y) == 0) == (x.equals(y))
,但这并不是必要的。如果没有保证这一点,对于有序集合会有问题。比如BigDecimal
的compareTo
和equals
方法就不一致,两个对象new BigDecimal("1.0")
和new BigDecimal("1.000")
在HashSet(equals)
中是不等的,在TreeSet(compareTo)
中又是相等的 -
从Java 7开始,所有的基本类型的装箱类型都提供了静态的
compare
方法,所以不再建议使用<
和>
。 -
Java8中引入了FunctionalInterface
Comparator
来配置简单的比较器:其中比较常用的thenComparingInt,Double,Long。此外comparing还有3个方法重载。里面的方法非常的丰富,是未来实现
Comparable
比较合适的方法
[图片上传失败...(image-a73395-1652885362899)]
private static final Comparator<PhoneNumber> COMPARATOR =
comparingInt((PhoneNumber pn) -> pn.areaCode)
.thenComparingInt(pn -> pn.prefix)
.thenComparingInt(pn -> pn.lineNum);
在TMS中很少见到使用Compareable
的方法,大部分的情况都是group, copy,使用equals和clone。
网友评论