java - 使用哈希码作为唯一 ID

标签 java unique hashcode

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

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

例如,如果一个字符串返回哈希码 -10 而另一个字符串返回哈希码 10,则会发生错误。在我的系统中,我们讨论的是通常不超过 30 个元素的对象集合,所以我不认为这真的是个问题,但我很好奇数学是怎么说的。

最佳答案

哈希码可以被认为是伪随机数。从统计上讲,当人口规模约为 54K(any int 为 77K)时,使用正的 int 哈希码,任何两个元素之间发生冲突的可能性达到 50% )。参见 Birthday Problem Probability Table用于各种哈希码大小的冲突概率。

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

关于java - 使用哈希码作为唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368492/

相关文章:

java - 将 JSONArray 转换为 List<Object>?

php - 没有mysql的php中唯一的ip访问重定向

bash - 使用 shell 脚本计算列中的唯一值

python - 需要转换行中具有唯一值的所有列吗?

hash - hadoop 中的 jenkinshash 保证什么?

c# - GetHashCode() 为相同的对象值返回不同的值

java - 如何在 gwt 中的 formPanel 上添加隐藏数据

java - 使用分区器时没有上下文持有者

java - hashCode() 用于返回负值的字符串

java - 无法使用 axis2 实例化 ADBDataSource 类型