[英]Why am I getting different hashcode values using hashcode builder for 2 equal objects?
[英]Why can't I just compare the hashCode of two objects in order to find out if they are equal or not?
为什么Eclipse实现的equals方法比较每个值,只比较两个对象的hashCodes是否更简单?
据我所知:
编辑:相关问题,如果实现equals实际上不需要hashCode,为什么在实现equals时总是执行hashCode?
hashCode总是为相同的输入生成相同的哈希
正确。
因此,如果两个对象相等,则它们应具有相同的哈希值
正确。
如果相等的对象具有相同的哈希值,我可以检查哈希值以确定对象是否相等
不合逻辑的推论。 不相等的对象也可以具有相同的哈希码。 这就是哈希码的目的。
相关的问题,如果实现equals实际上并不需要hashCode,为什么在实现equals时总是执行hashCode?
因为散列需要使用它,所以在HashMap, HashSet,
和好友中使用。 如果您认为您的对象永远不会被如此使用,请不要覆盖它,并祝您好运。
为了补充@EJP的答案 ,这是.hashCode()
一个完全有效但无用的实现:
@Override
public int hashCode()
{
return 42; // The Answer
}
简单地说:每只松鼠都是动物,但并非每只动物都是松鼠。 hashCode通常用于快速查找-它应该高效并且应该在查找表中均匀地分布数据-请参见此处 。 但是哈希函数会产生冲突,这就是为什么不应将其用作验证对象相等性的方法。
这完全取决于hashCode的实现-您也可以在fge的答案中看到。
关于为什么当您覆盖equals时通常需要重新实现它的原因:当从集合(例如HashMap)中存储和检索对象时,都使用它们。 hashCode确定地图上将插入对象的位置,而equals用于标识碰撞桶内的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.