简单了解HashCode()

在java的内部类中,计算HashCode通常使用 code = 元素* 31 + 下一个元素

以String为例

  public int hashCode() {
        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;
    }

为了保证hashcode值尽量避免冲突,因此用素数相乘的同时,又要保证范围较大。

而31作为一个素数,又可以优化运算

i*31== (i<<5)-1

内存也只占用5字节,因此通常选用31作为系数

 

另外,在Boolean中true和false的散列码为1231和1237

   public static int hashCode(boolean value) {
        return value ? 1231 : 1237;
    }

 

posted @ 2019-03-09 10:18  Noctis33  阅读(211)  评论(0编辑  收藏  举报