如果哈希码没有识别出唯一的对象,那么哈希码有什么用呢?

时间:2017-06-12 23:25:53

标签: java hash

Java API - 类对象

哈希码:

  

如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果。但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能。

如果两个对象可以产生不同的整数结果,那么通过散列实现了什么一致性?奇怪的是,两个不同的对象可以返回相同的哈希值。

2 个答案:

答案 0 :(得分:4)

哈希码只能有2个 32 整数值(至少在Java中)。如果你有更多可能的对象,那么具有相同散列值的两个不同对象是不可避免的。我们尽力避免这些"hash collisions",但通常数学上不可能(见pigeonhole principle)。

我们通常尝试设计散列函数,使其输出均匀分布在其范围内,从而使碰撞变得罕见。

答案 1 :(得分:1)

  

如果哈希码没有识别出唯一的对象,那么它有什么用呢?

哈希码不允许您识别唯一对象,但 可以识别该对象所在的唯一

然后,您只需考虑该组即可找到您的对象。

例如,HashMap可能有500个项目,分为1,000个组。由于哈希码,它会立即知道要查看的1,000个群组中的哪一个,拒绝其他999个群组。

无论该组是否有0,1或甚至6个元素,与查看所有500个元素相比,它仍然可以节省大量时间。