Hashcode最好被设计为键计算后的索引应该平滑、均匀的分布在所有范围内。但是偶尔冲突也会发生,例如两个键计算出了同样的索引。因此哈希表通常存储的是一个键值对的列表而非一个单个的值,这通常被称为哈希桶(hash bucket)。而在Java中,键值对就是一个有着两个域的对象。当插入时,你只要像计算出的索引位置插入一个键值对。当查找时,你先根据键哈希出对应的索引,然后在索引对应的位置找到键值对列表,最后在这个列表中查找你的键。
所以我们知道为什么相等的对象要重写hashcode
如果两个相等的对象hashcode不同,那么它们在聚合类存储的时候位置也就不一样——如果你存入了一个对象,然后查找一个相等的对象,就可能在错误的索引处进行查找,也就会得到错误的结果。