如何在 Java 中将字符串哈希为具有范围的整数

Y0g*_*pta 6 java string hash hashcode

假设我有 n 个字符串,现在我想使用函数将每个字符串映射到 0 到 n-1 范围内的整数,这样每当我调用函数并传递字符串和 n 时,它都会给我相同且唯一的值随时随地绘制地图。所以假设如果我有 4 个字符串“str1”、“str2”、“str3”、“str4”,那么映射将是从 0-3 并且是唯一的。

我尝试做类似 : 的事情str.hashCode() % n,这给了我相同的映射,但不在 0 到 n-1 的范围内。我在 PHP 中发现了与此类似的内容 -

https://madcoda.com/2014/04/how-to-hash-a-string-to-integer-with-a-range-php/

Fat*_*tie 4

作为记录

在 Java 中,将随机字符串哈希为整数:

Math.abs(str.hashCode() % 7)
Run Code Online (Sandbox Code Playgroud)

结果将为 0(含 0)到 6(含)。

笔记:

如果输入字符串确实是随机的并且长度相同等(例如......输入是一大堆uuid),那么这里的输出将是随机平衡的。

如果输入是(比如说)许多人名,则输出不太可能是随机平衡的。

笔记:

OP在标题中所问的问题在这里得到了回答。

事实上,OP(在正文中)询问的内容与哈希根本没有关系。(这只是一个查找表、正则表达式等。)