参考了https://blog.csdn.net/wangin1013/article/details/84857417
for (int i = 1179395; i <= 1179395; i++) {
for (int j = 19968; j <= 40869; j++) {
for (int m = 19968; m <= 40869; m++) {
if (i == 31 * j + m) {
System.out.println((char) j + "" + (char) m);
}
}
}
}
一段很扯的代码,生成了一堆hashcode为1179395,长度为2的字符串。
本来以为冲突的机会不大,这一折腾,冲突的就跟北京的地铁一样,都挤着来。
所以对hashcode
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
按照规则逆推的:s[0]*31(n-1)+s[1]*31(n-2)+…+s[n-1]