hashcode源码解析

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码对照表:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章