*对对象进行 *散列 意味着“ 找到可以由相同实例一次又一次地再现的良好的描述性值(数字)
”。由于Java的哈希码
Object.hashCode()类型为
int,因此只能具有
2^32不同的值。这就是为什么当两个不同的对象产生相同的hashCode时,将根据哈希算法产生所谓的“冲突”的原因。
通常,这不会产生任何问题,因为
hashCode()通常与一起使用
equals()。例如,a
HashMap将调用
hashCode()其键,以了解键是否可能已包含在HashMap中。如果HashMap找不到哈希码,则很明显该密钥尚未包含在HashMap中。但是,如果这样做,则必须使用仔细检查所有具有相同哈希码的键
equals()。
即
A.hashCode() == B.hashCode() // does not necessarily meanA.equals(B)
但
A.equals(B) // meansA.hashCode() == B.hashCode()
如果
equals()和
hashCode()正确实施。
有关常规
hashCode合同的更精确描述,请参见Javadoc。



