为什么比较器声明相等?

比较器接口有自己的方法。默认情况下,任何类都将通过 Object 类获取。接口内部需要什么方法?equals()equals()equals()


答案 1

Comparator完善了合同:它必须满足一约束。Object.equalsObject.equals

此外,仅当指定的对象也是比较器并且它施加与此比较器相同的排序时,此方法才能返回 true。因此,意味着对于每个对象引用 和 .comp1.equals(comp2)sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))o1o2

声明一个内部允许您以javadoc的形式记录它。equalsComparator

请注意,API的文档也用作合约,因此它不仅仅是这里的装饰品。这是其他代码和您的代码可以依赖的显式约束。

在具有不太成熟的方法的类似情况下,它也可以用作记录意图。也就是说,应该在那里,无论其超级接口如何演变。Interface.method


答案 2

从Java文档中可以看出,为什么有自己的方法:Comparatorequals()

但是,在某些情况下,重写此方法可以通过允许程序确定两个不同的比较器施加相同的顺序来提高性能


推荐