java - 为什么equals()有Comparator但Java中的Comparable接口(interface)没有

标签 java

equals() 方法存在于 Comparator 接口(interface)中,但它不存在于 Comparable 接口(interface)中。为什么?此外,根据 equals() 和 hashcode() 之间的约定,两者都必须被覆盖,而在 Comparator 中并非如此。为什么 ?谁能帮我理解它背后的概念。

最佳答案

equals() method is there in Comparator interface, but it is not present in Comparable interface. Why?

Comparator.equals(...) 用于测试对象是否等于此比较器;它不是用于测试两个可比较的对象是否相等。 (这就是为什么它需要一个 Object,而不是两个 T-s 的原因。)因此仅仅因为 Comparator 声明了它,并不意味着 Comparable 有任何理由声明它。

也就是说,仍然值得一问为什么 Comparator 声明它,因为 Comparator(与所有类型一样)已经是 Object 的子类型。原因很简单,Comparator 想要对 equals(...) 施加一些额外的要求,因此它需要提供特定的 Javadoc。 (具体来说,它要求两个比较器永远不会被认为是相等的,除非它们实现相同的顺序。Comparator 的实现可以通过仅使用 Object 中的 equals(...) 或通过定义自定义 equals(...)这样更准确。)

Also, As per the contract between equals() and hashcode(), both must be overridden, it is not the case in Comparator.

Comparator 实际上并没有“覆盖”equals(...)。 Comparator 的实现者仍然继承 Object.equals(...),除非他们覆盖它。

由于 Comparator 没有提供 equals() 的实际实现——它只是指定了一些额外的要求——它不需要对 hashCode() 做任何特别说明。 hashCode() 的一般约定以及 hashCode() 与 equals() 的关系仍然适用。

关于java - 为什么equals()有Comparator但Java中的Comparable接口(interface)没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066666/

相关文章:

java - 从导入的电子表格数据的字符串数组中获取特定 'elements' 的最简单方法?

java - 实现优先级队列有哪些不同的方法?

Java tomcat 应用程序显示许多客户端连接到 MySql DB

java - 从字符串中删除后备数组

java - 获取图像的拍摄日期

java - 如何使用Camel解压加密的zip文件

java - SCJP:不能加宽然后装箱,但可以装箱然后加宽

java - Android教程问题

Java程序创建文件,但文件不可见

java - Crawler4j无法AJAX爬行