hashcode源码:
源码解析:hash 默认为 0,value为hashcode对象的char[]类型
由第1456行可以得出,hashcode的计算公式为:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 其中s[0]、s[1]为对应的ASCII码。
计算公式对应第1470-1472行的for循环。
参照源码,我们可以自己编写代码实现hashcode,如下:
public static void main(String[] args) {
String str = "aAB";
System.out.println(str.hashCode());
//s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
char[] a = {'a','A','B'};//ASCII码 a:97 A:65 B:66
System.out.println(a[0]*31*31+a[1]*31+a[2]);
char[] chars = str.toCharArray();
int hashcode = getHashCode(chars);
System.out.println(hashcode);
}
private static int getHashCode(char[] chars) {
int hash = 0;
for (int i = 0; i < chars.length; i++) {
//0 31*0+ 97 97
//1 31*(31*0+ 97)+65 31*97+65
//2 31*(31*97+65)+66 31*31*97+31*65+66
hash = 31 * hash + chars[i];
}
return hash;
}
附ASCII码对照表: