当前位置: 首页 > 知识库问答 >
问题:

从比较器接口重写equals()[重复]

伯英武
2023-03-14

为什么在实现Comparator接口时不需要重写equals()方法?comparator中的equals()既不是静态的,也不是默认的。

在同一行中,我还想问,当Comparator有两个抽象方法compare()和equals()时,它是如何作为一个函数接口的?

共有1个答案

艾修筠
2023-03-14

任何对象都从基类对象继承equals的实现。如果你想改变行为,你只需要覆盖它。

比较器的文档。equals告诉你:

请注意,不重写Object.equals(Object)始终是安全的。然而,在某些情况下,重写此方法可以通过允许程序确定两个不同的比较器强制执行相同的顺序来提高性能。

 类似资料:
  • 问题内容: 假设我需要使用按某些域逻辑排序的元素。通过这种逻辑,不相等的元素的顺序无关紧要,因此compare方法可以返回0,但是在这种情况下,我不能将它们放入。 所以,问题是:这样的代码有什么缺点: 更新 : 好。如果它应该永远是方法之间的一致性,并且,作为@SPFloyd - seanizer和其他人说。如果我删除接口并移入此逻辑是否会更好甚至更好(我可以在不破坏封装的情况下做到这一点)?因此

  • 我是java新手,试图理解一些概念。这是一段我不懂的代码。 我知道这是怎么回事,但不明白为什么这是允许的。因此,我的问题是: 从java文档中,比较器[T]是一个接口。比较器[水果]怎么样?我将假设它是一个类,因为它必须覆盖比较函数。 为什么可以在{}中使用非参数构造函数和类定义来初始化FruitName比较器?我在比较器[T]的javadoc中没有找到这样的构造函数声明。 如有任何意见,将不胜感

  • 当我在浏览上面的接口时,在阅读了许多相同主题的站点后,我对这些接口的语法不是很清楚。 请考虑以下代码段: 如果每个查询都是可理解的。

  • 我有一个关于比较器接口的问题。在我的类下面实现了按长度而不是按字符值排序的默认排序的接口。 覆盖默认比较后,我使用对我的字符串数组进行排序。即使我覆盖了默认方法,如果我使用Arrays.sort,它会调用默认比较而不是我覆盖的方法。这是因为我显式调用了超类方法吗? 另一个问题是初始化接口本身。我知道您不能初始化接口,而是初始化一个类对象(实现所述接口)来引用接口可用的方法。在这种情况下,当我初始化

  • 我们知道,如果我们想创建一个类的对象,就必须实现接口的所有方法。但是为什么不需要在java中同时实现接口的和? 我同意目的已经解决了,但即使如此,如果我们重写(),为什么不强制重写()?

  • 为什么ArrayList的包含(对象o)不运行我的重写等于(对象o)方法?考虑以下代码: 正如你所见: > 对称因为o==rc时且仅当rc==o时 自反的,因为rc==rc 对于比较中使用的任何Rc组件。 通过visible here方法添加任何元素都会打印为false。没有在方法中起作用。将运算符更改为并没有任何区别。这里怎么了?