以下是java.lang.String的原代码: public int hashCode() { int h = hash;//默认0 if (h == 0) { int off = offset;//默认0 char val[] = value;//字符串是用字符数组表示的. int len = count;//字符串长度 for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; } 他返回的是一个int类型的数据,而int的最大值是2147483647,你的是10w个字符串,机会应该很小,再说java本身应该会通过某种散列算法减少冲突的.
public int hashCode() {
int h = hash;//默认0
if (h == 0) {
int off = offset;//默认0
char val[] = value;//字符串是用字符数组表示的.
int len = count;//字符串长度
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
他返回的是一个int类型的数据,而int的最大值是2147483647,你的是10w个字符串,机会应该很小,再说java本身应该会通过某种散列算法减少冲突的.
Integer对象的hashcode等于该对象的int值;
任意一个string,取得他的hashcode X,
Integer a = X;
那么a和原string的hashcode就是相等的;