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

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

最佳答案

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

Math.abs(str.hashCode() % 7)
结果将为 0(含)到 6(含)。
笔记:
如果输入字符串真的是随机的并且长度相同等(例如......输入是一大堆uuid),那么这里的输出将是随机平衡的。
如果输入是——比如说——许多人的名字,那么输出是不太可能随机平衡的。
笔记:
在这里回答了 OP 在标题中的字面意思。
事实上,OP 所询问的(在正文中)与散列完全没有关系。 (那只是一个查找表、一个正则表达式等。)

关于java - 如何在Java中将字符串散列为具有范围的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058551/

相关文章:

c++ - 标准模板字符串类 : string. fill()

ios - 如何获取 "hashed device id"以在 ios 上测试 admob

c - 76 个字符长的字符串的单义哈希函数

ruby - 如何在不转换为数组的情况下按 Ruby 中的数值对哈希进行排序?

java - Java.math.BigInteger.and() 是如何工作的?

java - 如何以及何时实现 Selenium WebDriver 的刷新(ExpectedCondition<T> 条件)?

string - Octave - 返回字符串在元胞数组中第一次出现的位置

concat char* 与 char netbea

java - Maven 程序集为 tar 设置用户名

java - 将主类值存储在子类中作为数组