1. 程式人生 > >HashMap的hash函式

HashMap的hash函式

hashmap的hash函式原理

hashmap陣列下標方法

static int indexFor(int h, int length) {
        return h & (length-1);
}

返回的就是陣列下標,
hashmap的length是2的整次冪, 那麼length-1 就生成一個低位掩碼,和hash值操作後,去掉了全部高位數字,只保留後四位

   11000100 11000100 11000100 00100101
&  00000000 00000000 00000000 00001111
----------------------------------
   00000000 00000000 00000000 00000101    //高位全部歸零,只保留末四位

hash函式

static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

hash函式的作用就是,將高位bit移到低位,和(n-1)進行運算,得到陣列地址.

hashmap的儲存結構

陣列: transient Node<K,V>[] table;
連結串列: Node<K,V>
紅黑樹: TreeNode
連結串列和紅黑樹閾值: TREEIFY_THRESHOLD = 8 ,大於8時轉化為紅黑樹