【发布时间】:2014-03-05 20:28:32
【问题描述】:
String#hashCode() 方法的 Java 文档说:
返回此字符串的哈希码。 String 对象的哈希码计算为
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算术,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示求幂。 (空字符串的哈希值为零。)
问题:
- 是否可以为具有不同值的两个字符串对象使用相同的哈希码?如果是,请分享一些示例。
- 是否可以从哈希码中取回字符串值?
我没有在代码中的任何地方使用它。我刚刚问了这个问题是为了了解更多关于 Java String 类的信息。
【问题讨论】:
-
是否可以为具有不同值的两个字符串对象使用相同的哈希码? 是的。 是否可以从哈希码中取回 String 值? 不可以。
-
哈希码是 32 位长。您可以拥有数千字节长的字符串。没有办法将字符串唯一地编码为哈希码。
-
非常感谢您提供的示例。我错了,字符串对象总是返回唯一的哈希码。
-
实际上我正在使用 HashMap
其中键是数据库查询的哈希码,值是在 infinispan 中缓存它的响应。但现在它可能会产生一个问题,即两个不同的查询生成相同的哈希码。 -
它曾经非常糟糕,回到 Java 1.0.2 左右。就像任何超过 10 个字符的字符串都可能具有相同的哈希值。