常用类 HashCode 生成规则
public int hashCode() {}
方法是可以被重写的,所以可以自定义 HashCode 的生成规则。
1、对于integer源码如下:
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
可以看出value就是对应的hashcode值
2、对于String源码如下:
public int hashCode() {
//这里的 h 默认等于 0
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
可以看出其 value 字符串依次遍历其每个字符成员,并将当前的 hashcode * 31 +下一个成员对应的ascII值,
eg: String s = "ab";
"1" ----> 97
"0" ----> 98
h = 31 * 0 + 97 h = 97
h = 31 * 97 + 98 h = 3105
3、Long类型源码如下:
可以看出其值为当前值与当前逻辑右移32
位之后异或得出的值
public static int hashCode(long value) {
return (int)(value ^ (value >>> 32));
}
如果帮到了你,留下赞吧,谢谢支持~