【发布时间】: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 进行一对一的映射。