无论是Javadoc还是代码本身,Comparator接口都定义了:
int compare(T o1, T o2);
boolean equals(Object obj);
但这没有编译任何概率:
Comparator a = new Comparator() {
@Override public int compare(Object o1, Object o2) {
//..
}
};
但这确实是:
Comparator a = new Comparator() {
@Override public boolean equals(Object comparator) {
//..
}
};
接口不允许用户重写方法的方法是什么?
首先,JavaDocs清楚地解释了您应该实现此方法:
此外,仅当指定对象也是一个比较器并且施加与该比较器相同的顺序时,此方法才能返回true。因此,
comp1.equals(comp2)
意味着sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))
对于每个对象引用o1
和o2
。
但后来:
请注意,始终不要覆盖即可
Object.equals(Object)
。
equals()
即使它是接口的一部分,如何也不可以覆盖它?因为已经为Java
中的Object
每个对象(在类中)实现了此方法。
在接口的声明仅在那里强调的重要性,equals()
至于Comparator
通过增加额外的Javadoc解释。
顺便说一句,如果您的比较器是无状态的,则应该只有一个实例-在这种情况下,默认equal()
实现就可以了。
问题内容: 如果我重写一个类两种方法,它必须确保,如果那么也必须是真实的。 有人可以告诉我一个简单的示例,如果违反了该示例,将会引起问题吗?我认为这与您使用该类作为Hashmap的键类型有关吗? 问题答案: 当然: 与: 从技术上讲应该是正确的,因为在两种情况下m == 3。 通常,HashMap的工作方式如下:它具有可变数量的通常称为“存储桶”的数量。存储桶的数量可以随时间变化(随着条目的添加和
问题内容: 你知道吗 : 将输出: 这是由于(继承自)未覆盖的事实引起的。 您知道为什么会这样吗? 问题答案: 根据的合同,没有针对s 的通用equals()方法,因此无法提供一个。 请注意,它既不是Set也不是List,因此既不是数量也不是它不支持的原因。
或者“为什么Sun/Oracle的家伙每次都强迫我们重写equals()和hashCode()?” 每个人都知道,如果你覆盖一个对象的equals()或hashCode(),你也必须覆盖另一个,因为这两者之间有一个约定: 请注意,每当重写hashCode方法[e.equals()]时,通常有必要重写该方法,以维护hashCode方法的一般约定,即相等的对象必须具有相等的哈希代码。-对象的API文档
问题内容: 为什么字典键必须是不可变的?我正在寻找一个简单明了的原因,为什么Python字典中的键具有该限制。 问题答案: 在我的计算机上,有一个包含大量英语单词的文件: 让我们创建一个字典来存储所有这些单词的长度: 并且,为了踢球,我们将改组原始单词列表: 嗯,滚刀。无论如何…现在我们已经有点混乱了,我们变得有点偏执了(可能出于与渴望滚刀相同的原因),并且我们想检查字典中的所有单词是否都正确。我
本文向大家介绍在.vue文件中style是必须的吗?那script是必须的吗?为什么?相关面试题,主要包含被问及在.vue文件中style是必须的吗?那script是必须的吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 style 不是必须的,script 是必须的,而且必须要写上
本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha