1. 程式人生 > >HashMap的resize都幹了啥

HashMap的resize都幹了啥

閾值 = 容量 X 負載因子;容量預設為16,負載因子(loadFactor)預設是0.75; map擴容後,要重新計算閾值;當元素個數大於新的閾值時,map再自動擴容; 以預設值為例,閾值=16*0.75=12,當元素個數大於12時就要擴容;那剩下的4(如果內部形成了Entry鏈則大於4)個數組位置還沒有放置物件就要擴容,豈不是浪費空間了? 
這是時間和空間的折中考慮;loadFactor過大時,map內的陣列使用率高了,內部極有可能形成Entry鏈,影響查詢速度;loadFactor過小時,map內的陣列使用率舊低,不過內部不會生成Entry鏈,或者生成的Entry鏈很短,由此提高了查詢速度,不過會佔用更多的記憶體;所以可以根據實際硬體環境和程式的執行狀態來調節loadFactor; 

2. 如何做resize?我們看一看resize()原始碼: