使用哈希码获取唯一ID

我在一个基于Java的系统中工作,我需要为视觉显示中的某些元素设置一个ID。一类元素是字符串,因此我决定使用String.hashCode()方法来获取这些元素的唯一标识符。

但是,我遇到的问题是,如果id为负,并且String.hashCode经常返回负值,那么我正在borks中工作的系统。一种快速的解决方案是仅在哈希码调用周围使用Math.abs()来确保得到肯定的结果。我想知道这种方法是,两个不同的元素具有相同的哈希码的机会是什么?

例如,如果一个字符串返回的哈希码为-10,而另一个字符串返回的哈希码为10,则将发生错误。在我的系统中,我们所谈论的对象集合通常不超过30个元素,因此我不认为这确实是一个问题,但我对数学的含义感到好奇。

回答:

哈希码可以看作是伪随机数。从统计int上讲,当总体大小约为54K(对于 任何, 则为77K

int)时,使用正的哈希码,任何两个元素之间发生冲突的机会都将达到50%。有关各种哈希码大小的冲突概率,请参见生日问题概率表。

另外,您Math.abs()单独使用的想法有缺陷:它并不总是返回正数!在2的补码算术中,的绝对值Integer.MIN_VALUE本身就是!众所周知,的哈希码"polygenelubricants"就是这个值。

以上是 使用哈希码获取唯一ID 的全部内容, 来源链接: utcz.com/qa/420814.html

回到顶部