java - 好的哈希函数? (32位太小,64位太大)

标签 java hash md5 apache-commons uniqueidentifier

我需要生成一个哈希值,用于 Java 中数十亿条记录的唯一性。问题是,我只有 16 个数字可以玩。在研究这个问题时,我发现了 32 位哈希算法,它返回 Java 整数。但这太小了,因为它的范围只有+/- 20亿,而且还有更多的记录。我无法使用 64 位哈希,因为这会给我返回太大的数值(+/4 quintillion,或 19 位数字)。问题是,我正在处理一个遗留系统,它迫使我使用 16 位数字的静态 key 长度。

建议?我知道没有哈希函数可以保证唯一性,但我需要一个好的哈希函数来满足这些限制。

谢谢

最佳答案

如果您生成的哈希太大,您可以使用 key 空间最大值对其进行修改以使其适合。

myhash = hash64bitvalue % 10^16

关于java - 好的哈希函数? (32位太小,64位太大),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566273/

相关文章:

java - 如何在 pdf 报告中添加从相机或图库中捕获的图像?

java - 具有主/备份数据库的单个 JDBC OracleDataSource/HikariCP

MySQL - 散列整个查询集

c# - 比较具有相同内容的 XLSX 文件之间的 MD5 哈希值

unix - AIX 操作系统中的 MD5 哈希值

Java ImageIO 灰度 PNG 问题

java - 从映射中的对象中删除某些元素

Perl 在 hash of hash 中搜索一个值并重新分配给另一个 hash

ruby - Array() 应用于哈希?

php - 为什么 MD5'ing UUID 不是一个好主意?