哈希表中hash函數中的%和&

MyHashMap

return h % M;

爲了不hash碰撞,咱們將M每每設置成質數,避免因爲鍵在某一範圍比較集中所致大量的hash碰撞
如:當h值集中100-120,可是M取了100,這樣hash所得值集中在0-20。java

Java中的HashMap中

默認值M爲16code

return h & (M - 1);
  • 等效取餘
    M取值每每爲2的冪次方,而M-1會產生低位全爲1的狀況,使得&運算結果小於Mhash

  • 運算效率提升
    %運算的效率低於位運算效率

  • 碰撞問題
    產生大量碰撞的狀況:
    二進制來看,參數key中M個低位常出現同一值。如M爲4,而M-1其二進制爲:1111
    參數key中的低位出現同一值,如:00001110,00101110,01001110
    但由此而言,產生hash碰撞的數據相差之間較大。hashmap

  • 2的冪次的緣由
    保證小於M的每一個值均可以取到map

相關文章
相關標籤/搜索