HashMap的hash函式
阿新 • • 發佈:2019-01-02
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時轉化為紅黑樹