我必须使用相同的哈希码生成两个字符串。我研究过它,我达到的最大值是只更改字符串的前两个字符。
public static String same(String s) {
String re = "";
char c = 0;
char ch = 0;
for (int i = 0; i < s.length(); i++) {
c = (char) (s.charAt(0) + 2);
ch = (char) (s.charAt(1) - 31 * 2);
}
String S = new String(new char[] { c, ch });
re = S+ s.substring(2);
return re;
}
如何使其适用于所有string.length()??
答案 0 :(得分:1)
来自String的hashCode在JavaDocs中描述 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#hashCode()
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
因此,对于每个char,您可以将其替换为任何char,其中s [i] * 31 ^(n-i-1)给出相同的值。
答案 1 :(得分:0)
我想知道为什么你必须使用相同的哈希码生成2个字符串?您无法生成散列到特定哈希代码的对象。散列函数是单向函数。散列码加速对象比较并将对象映射到特定散列空间。除非您知道用于计算代码的方法的内部工作方式,否则您无法对其进行反向工程以计算将生成该哈希代码的对象状态。