【问题标题】:How to make a string out of a hashed code in java?java - 如何从java中的哈希码中生成一个字符串?
【发布时间】:2021-01-01 00:05:22
【问题描述】:

我知道 java 中的 string.hashCode() 是如何工作的:

    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

假设我们有一个像“119193”这样的哈希码对应于“xyz”。
有什么方法可以取消哈希并找到真正的字符串

【问题讨论】:

  • 如果你能做到,那么它就不再被称为hash了。
  • 不,没有。不同的字符串可以有相同的哈希码。
  • int 具有有限数量的值,而您可以创建的可能字符串没有限制。所以它应该是不言自明的,为什么你不能从每个可能的 String 到唯一的 int 进行一对一的映射。

标签: java string hash hashcode


【解决方案1】:

哈希函数被设计为只有一种方式。

当您将理论上无限大的输入组(所有可能的字符串)转换为有限数量的整数时,多个不同的字符串不可避免地会产生相同的哈希。

也就是说,理论上您可以测试大量字符串并检查新哈希是否与存储的哈希匹配。然而,你永远无法确定这个字符串是否与原始输入相同,因为多个字符串可能会产生相同的哈希值。

如果您有有限数量的输入字符串(即来自预定义的池),或者您可以将测试搜索范围缩小到字典中的单词组合,您可以减少测试哈希所需的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2011-09-01
    相关资源
    最近更新 更多