字符串的Java哈希码从0到1

K2x*_*2xL 1 java hashcode

所以我知道我可以简单地通过执行.hashCode()将字符串转换为哈希码,但有没有一种方法可以转换(或使用其他一些函数,如果有一个),而不是返回一个整数返回一个双0和1?我想把数字除以最大可能的整数,但不确定是否有更好的方法.

*编辑(有关我为什么要这样做的更多信息):我正在进行数学运算,并且我正在尝试将不同的对象分组以在其组中执行相同的数学运算但是在函数中具有不同的参数.每个成员都有一个"组合"它们的特征列表...所以我想把特征放入一个字符串然后对其进行哈希编码并从中找到它们的组值

Jon*_*eet 6

你不能只是分开Integer.MAX_VALUE,因为这不会处理负数.你可以使用:

private static double INTEGER_RANGE = 1L << 32;
...
// First need to put it in the range [0, INTEGER_RANGE)
double doubleHash = ((long) text.hashCode() - Integer.MIN_VALUE) / INTEGER_RANGE;
Run Code Online (Sandbox Code Playgroud)

这应该没问题,据我所知......但我不会对发行做出任何声明.可能有一种相当简单的方法可以使用32位在正确的范围内创建一个唯一的双精度(每个唯一的哈希码),但是如果你不太关心它,这将更简单.