我在一次採訪中被問到一個非常好的問題。問題是 -Hashmap - 負載因子等於容量
我們知道如果hashmap條目達到loadfactor,就會發生重新哈希。例如 - 如果我的loadfactor是7,我的mapsize是9,那麼當沒有時,就會發生刷新。的條目達到7個。
現在的問題是,我想在這張地圖上只輸入8個元素(因爲我們知道我已經將負載因子保持爲7),那麼當我輸入第7個元素時,就會發生重新哈希。所以我只是想在第7個元素後添加一個元素,但是重新哈希發生並且大小不必要地增加,並且導致不必要的內存浪費。 那麼爲什麼我沒有保持loadfactor大小等於初始容量。爲什麼它保持在75%或80%或類似的東西。
在此先感謝您的答案。
很多謝謝你的回答。但我仍然感到困惑。你說的是,當超過負載因子時擴展是一個簡單的(和有效的)策略......這很好,但他們爲什麼不保持負載因子等於初始容量,這樣只有當hashmap滿了纔會發生重新哈希。 – Shanky
@Shanky我想我明白你的意思了。這是爲什麼:加載因子是新插入的元素與已加載元素相沖突的可能性的指示器,也就是說,加載的散列表越多,新元素髮生碰撞的可能性越大,意味着元素的散列密鑰相等,這將導致目標桶中更長的喜歡名單,從而降低效率。加載因子嘗試防止散列表退化爲多個長鏈接列表,這對於插入操作不是o(1)。 – lulyon
這並不能解釋爲什麼加載因子不是1.它解釋了爲什麼調整大小不僅僅爲空間分配了一些新元素。 –