【发布时间】:2014-07-24 09:33:44
【问题描述】:
我已阅读该主题中的所有帖子,但我仍然对以下内容感到困惑:何时可能发生覆盖和碰撞?根据我的阅读,我看到:
- 只要两个对象的
equals()方法相同,它们的哈希码必须相同 - 当两个对象在
equals()方法方面不相同时,我们无法保证hashcode()的id,即它可能相同,也可能不同 - 当我们使用
HashMap.put(key, value)HashMap 通过equal()方法比较对象。如果这两个键是equal(),那么新的value将被覆盖 - 如果两个 kay 具有相同的
hashcode,则会发生冲突并由 Java 处理 -
然而如果两个key相等,那么新的值会被覆盖,但是这也意味着
hashCode()必须相同,所以一定会发生碰撞,这和之前的矛盾吗?
有人可以帮我解释一下这些步骤吗?
【问题讨论】:
-
你写的是正确的。这可能是一个解释问题:当两个对象相等(因此具有相同的哈希码)时,它并不是真正的“必须处理的冲突”。对象是相等的,所以没有需要增加的存储桶大小......