回覆列表
  • 1 # 使用者6847486145697

    為後來者解惑!

    先丟擲倆個問題:

    1.為什麼hashmap的容量約定是the power of 2 size呢

    2.基於問題1的前提下,為什麼不是32,或者8呢

    回答:hashmap是基於陣列的,原始碼: transient Node

    table俗稱hash桶(hash bin),將一個元素放到桶裡時,不是像arraylist那樣按順序放,而是根據key的hash值來計算index。

    這個時候就會產生hash碰撞,即如果演算法不合法,key會大機率的計算到同一個index,從而使元素都放在同一個桶中。

    為了減少雜湊碰撞的機率,我們需要一個演算法,該演算法能讓元素比較平衡的放到不同的桶中,最簡單的方式就是key.hash % table.length,為了效率,使用了位與&運算子。原始碼中使用了tab[i = (n - 1) & hash]。

    當n=the power of 2時,n-1的二進位制的後幾位全是1,這時與操作更均勻。問題2,Maybe a tradeoff between speed, utility, and quality of bit-spreading.

  • 中秋節和大豐收的關聯?
  • vivo手機顏色反轉在哪設定?