SCJP HashCode()和Equals()混乱

时间:2014-08-27 10:46:19

标签: java

在SCJP Book中有一个表

enter image description here

我在Last Row上感到困惑。如果x.hashCode()! = y.hasCode()比“必需”那样 x.equals(y)== false

因为根据我的理解,如果HashCodes不同,会有不同的存储桶,并且从中找到Object不会产生问题,而不是“x.equals(y)== false”需要吗?

让我们假设x.hashCode()! = y.hashCode()。并x.equals(y) == true.

从Or To Map OR Set中检索或添加对象时是否有任何区别。?

任何例子都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

这适用于为自己的类实现自定义hashCodeequals方法的情况,它是您需要尊重的合同,以便在Java中实现散列和对象相等性测试。他们在本书中提到了这一点,因为在您自己的实施中,您可以使用自己的自定义hashCodeequals方法违反这些合同

您所谈论的条件是x.equals(y) == true暗示x.hashCode() == y.hashCode()(表格第一行)的直接结果

P暗示Q)与(not Q隐含not P)相同,P是该教科书表第一行的x.equals(y) == true ,Q为x.hashCode() == y.hashCode()

答案 1 :(得分:0)

哈希码旨在加快搜索速度。如果你有a.equals(b) == truea.hashCode() != b.hashCode()那么使用散列的容器将找不到一些没有散列的容器会找到的结果,以及其他问题。

最后一行也是第一行的对立面。