相关疑难解决方法(0)

为什么String中的Java hashCode()使用31作为乘数?

每Java文档中,哈希代码String对象被计算为:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)

使用int算术,其中s[i]是 字符串的第i个字符,是字符串n的长度,并^指示取幂.

为什么31用作乘数?

我知道乘数应该是一个相对较大的素数.那么为什么不是29岁,37岁,甚至97岁?

java string algorithm hash

461
推荐指数
11
解决办法
14万
查看次数

如何在android中生成字符串输入的唯一哈希码...?

我想为android中的字符串生成一个唯一的哈希码.是否有任何预定义库或我们必须手动生成.如果有任何正文,请提供链接或代码.

java hash android hashmap

50
推荐指数
3
解决办法
14万
查看次数

什么是英语单词的好哈希函数?

我有很多英文单词,我想哈希.什么是良好的散列函数?到目前为止,我的散列函数将字母的ASCII值相加,然后以表格大小为模.我正在寻找一些有效而简单的东西.

c c++ hash

18
推荐指数
3
解决办法
3万
查看次数

在UTF16中寻找文件路径的64位哈希值

我有一个Unicode/UTF-16编码路径.路径分隔符是U + 005C'\'.路径是以空值终止的根相对Windows文件系统路径,例如"\ windows\system32\drivers\myDriver32.sys"

我想将此路径哈希为64位无符号整数.它并不需要"加密的声音".散列应该不区分大小写,但能够处理非ascii字母.显然,哈希也应该散布好.

我有一些想法:

A)使用Windows文件标识符作为"哈希".在我的情况下,我确实希望在文件移动时更改哈希值,因此这不是一个选项.

B)只需使用常规的sting哈希:hash + = prime*hash + codepoint作为整个字符串.

我确实感觉可以利用路径由"segements"(文件夹名称和最终文件名)组成的事实.

总结需求:

1)64位散列
2)文件系统路径的良好分布/少碰撞.
3)高效
4)不需要安全
5)不区分大小写

hash path utf-16 collision hash-collision

7
推荐指数
1
解决办法
2746
查看次数

普通程序员是否有"足够好"的哈希函数?

我们被告知我们应该为我们的类实现hashCode(),但是像我这样的大多数人都不知道如何做到这一点,或者如果我们把它"弄错"会发生什么.例如,我需要一个哈希函数来索引树中的节点(在(解析)树的集合中查找最频繁的子树).在这种情况下,我需要基于有序的子节点递归地生成哈希码,例如

hashCode = function(child1.hashCode, child2.hashCode, ...)
Run Code Online (Sandbox Code Playgroud)

最近的hashCodes 讨论中,答案包括字符串的散列(基于长素数和31)以及位移.String哈希是:

// adapted from String.hashCode()
public static long hash(String string) {
  long h = 1125899906842597L; // prime
  int len = string.length();

  for (int i = 0; i < len; i++) {
    h = 31*h + string.charAt(i);
  }
  return h;
}
Run Code Online (Sandbox Code Playgroud)

我对安全性不感兴趣,也不介意碰撞.是否存在一个"通用函数",用于组合有序对象的哈希码,它们会比损害更好(并且比完全不调用它更好)?

还有一个我们可以查找常见案例的网站吗?字符串,列表等)

我没有指定语言,因为我希望有通用的方法.但如果它是严格的语言,那么请说明语言以及为什么它不是普遍的.

更新两个建议是使用IDE的hashCode生成器.这似乎是一个很好的默认; 这是Netbeans:

public int hashCode() {
    int hash = 5;
// objects
    hash = 97 * hash + (this.rootElement != null ? this.rootElement.hashCode() : …
Run Code Online (Sandbox Code Playgroud)

language-agnostic hash

5
推荐指数
1
解决办法
1236
查看次数

如何从 PHP 中的字符串获取 64 位整数哈希?

我需要字符串的 64 位整数哈希值,例如哈希映射。

在我看来,没有可以返回 64 位整数的原生 PHP 哈希功能?

我认为可以将 sha1 哈希的第一部分转换为整数。但是,这不会带来最佳性能,并且转换似乎很棘手。

当然,无需安装即可使用本机 PHP 函数会很好。

php algorithm hash 64-bit integer

3
推荐指数
1
解决办法
6480
查看次数

从 Java 中的给定字符串派生/计算唯一哈希的最佳方法

我正在寻找在 Java 中为给定字符串计算唯一哈希的方法。看起来我不能使用 MD5 或 SHA1,因为人们声称它们已损坏并且并不总是保证唯一性。

对于通过该equals()方法相等的两个 String 对象,我应该获得相同的哈希值(最好是 32 个字符的字符串,如 MD5 Sum)。并且没有其他 String 应该生成这个哈希 - 这是棘手的部分。

有没有办法在 Java 中实现这一点?

java hash md5 sha1 md5sum

2
推荐指数
1
解决办法
1961
查看次数