public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++]; ///////////////看这里
}
hash = h;
}
return h;
}
1、上文使用31的原因:
(1)31是一个素数(只能被自身和1整除,减少冲突);
(2)h*31可以被虚拟机优化为(h<<5),提高算法效率;
(3)数值尽量大,hash地址就越大,减少冲突;
(4)31只占用5bits(11111),相乘溢出概率小;