如何将字符串散列为具有Java范围的整数

时间:2017-03-28 00:15:23

标签: 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/

1 个答案:

答案 0 :(得分:1)

备案

在 Java 中,将随机字符串散列到一个整数:

Math.abs(str.hashCode() % 7)

结果将为 0 到 6 包含在内。

注意:

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

如果输入是——比如说——很多人的名字,那么输出是不太可能随机平衡的。

注意:

OP 在标题中的字面意思在这里得到了回答。

事实上,OP 所询问的(在正文中)与散列完全没有关系。 (那只是一个查找表、一个正则表达式等。)