如果您尝试在hashmap中插入两个具有不同哈希码的相同对象,会发生什么?
答案 0 :(得分:2)
这意味着哈希函数被破坏(至少从哈希表的角度来看),因此它可以以不可预测的方式运行(可能会插入重复项)。
答案 1 :(得分:1)
让我们采用散列映射的简单实现来存储键值对
假设分配的存储区域大小为allocated_size,密钥和值相同
用于存储新对的存储索引使用类似hash_index = (hash_code(key) % allocated_size)
的简单模来计算
如果此hash_index的插槽是空闲的,我们就完成了,我们只将密钥和值存储在此索引处
如果此hash_index的插槽已被占用,则它取决于:
hash_index
,我们将覆盖相关的值; hash_index+1
处的存储空间,直到找到相同的密钥或空插槽。现在,假设我们有两个相等键的hash_codes 33和53。
您在此处观察到的是典型的未定义的行为。我很确定更精巧的实现会遇到类似的问题,所以不,两个相等的键 SHALL NOT 具有不同的哈希码,它是一个破坏的哈希函数。