Java从哈希码重新创建字符串

| 有什么方法可以在Java中使用字符串的哈希码,然后重新创建该字符串? 例如像这样的东西:
String myNewstring = StringUtils.createFromHashCode(\"Hello World\".hashCode());
if (!myNewstring.equals(\"Hello World\"))
    System.out.println(\"Hmm, something went wrong: \" + myNewstring);
我之所以这样说,是因为我必须将字符串转换为整数值,然后从该整数值重构该字符串。     
已邀请:
        这是不可能的。 String的哈希码是有损的;许多字符串值将导致相同的哈希码。整数具有32位位置,并且每个位置都有两个值。甚至无法将32个字符的字符串(例如,每个字符都有很多可能性)映射到32位而不会发生冲突。他们只是不合适。 如果要使用任意精度算术(例如BigInteger),则可以将每个字符作为整数并将它们全部串联在一起。 Voilà。     
        否。多个字符串可以具有相同的哈希码。从理论上讲,您可以创建所有具有该哈希码的字符串,但是它将接近无限。     
        恐怕不可能。考虑一下,哈希码是一个长值,即8个字节。一个字符串可能小于此长度,但也可能更长一些,您不能将更长的字符串压缩为8个字节而不会丢失任何内容。 如果我没记错的话,Java哈希码算法会每8个字节加总一次,因此您会丢失8个字节中的7个字节。如果您的字符串都很短,则可以将它们编码为int或long而不丢失任何内容。     
        假设该字符串仅由字母,数字和标点组成,因此大约有70个可能的字符。
log_70{2^32} = 5.22...
这意味着对于任何给定的整数,您都将找到一个5或6个字符的字符串作为其哈希码。因此,检索
\"Hello World\"
:不可能;但是如果您很幸运,
\"Hello\"
可能会起作用。     
        例如,\“ 1019744689 \”和\“ 123926772 \”的哈希码均为-1727003481。这证明对于任何整数,您可能会得到不同的结果(即
reversehashcode(hashcode(string)) != string
)。     

要回复问题请先登录注册