有什么方法可以在Java中使用字符串的哈希码,然后重新创建该字符串?
e.g。这样的东西:
String myNewstring = StringUtils.createFromHashCode("Hello World".hashCode());
if (!myNewstring.equals("Hello World"))
System.out.println("Hmm, something went wrong: " + myNewstring);
我这样说,因为我必须将字符串变成整数值,然后从该整数值重建该字符串。
没有。 多个字符串可以具有相同的哈希代码。 从理论上讲,您可以创建所有具有该哈希代码的字符串,但它将接近无限。
如果我没记错的话,Java HashCode算法每8个字节总和,以便您损失8个字节中的7个字节。如果您的字符串都很短,那么您可以将它们作为int或long编码而不会丢失任何东西。
例如,“ 1019744689”和“ 123926772”都有-1727003481。这证明,对于任何整数,您可能会得到不同的结果(即
reversehashcode(hashcode(string)) != string
)。
log_70{2^32} = 5.22...
"Hello World"
:不可能;但是,如果幸运的话,可能会起作用。
您可以做这样的事情:
"Hello"
到达:
char[] chars = "String here".toCharArray();
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = (int)chars[i];
}
我尚未实际测试过...这只是“概念”代码。