【问题标题】:Hashing multiple Strings into one Hash将多个字符串散列到一个哈希中
【发布时间】:2019-10-28 18:21:37
【问题描述】:

我有一个包含许多字符串的数组。我想创建一个哈希。首先,我像这里一样对该数组的所有字符串进行哈希处理:

for (int i = 0; i < strings.length(); i++)
{
    strings[i] = hash(strings[i]);
}

所以现在我有 1 级的哈希值。如下图所示。有什么算法可以做接下来的步骤吗?我不想制作默克尔树。

【问题讨论】:

  • 根据什么逻辑例如hash 01 和 hash 02 是否匹配?
  • 这与哈希无关,这是一个关于for循环的问题。在您演示的第一次散列之后,将数组输入另一个 for 循环,该循环一次处理两个元素并输出一个较短的数组。然后重复,直到输出中剩下一个元素。包括你的 for 循环在内的整个过程都可以写成递归函数。
  • 你真的需要每个级别的哈希吗?
  • 您必须决定元素的位置是否重要,即{"a", "b",} 是否应具有与{"b", "a",} 相同的hashCode。接下来,检查提供的方法之一是否符合要求(不考虑是否能够使用它们)。如果你自己滚动,要么选择对称函数来组合值,要么选择不对称函数。
  • 为什么不对所有子串串联的字符串进行哈希处理?

标签: java algorithm hash hashmap


【解决方案1】:

感觉Arrays.hashCode(Object a[])可以用。

如果Arrays.hashCode(Object a[]) 有帮助,请查看。

String[] strings = {"Hello 1", "Hello 1", "Hello 1"};
int hasCode = Arrays.hashCode(strings);
System.out.println(hasCode);

【讨论】:

    【解决方案2】:

    如果我是你,我会将所有字符串合并为一个,然后散列那个长字符串。

    例如。

            StringJoiner j=new StringJoiner("");//Or any other separator
            Arrays.asList(strings).forEach(j::add);
            String finalHash=hash(j.toString());
    

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2015-02-08
      • 2012-01-22
      • 2017-04-24
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多