在前幾天面試中軟的時候,面試官問了我這麼一個問題:如果已知容量爲100的話。你怎麼處理?
首先一些必備的基礎知識
- 位運算 index=HashCode(key)*(length-1)
- 默認長度16 ,每次擴容成自己的兩倍
- ReSize>=Capacity*LoadFactor ,其中LoadFactor默認爲0.75f。
那現在問題來了,如果按照16來算,16、32、64..... 但是Resize是麻煩的(Resize包括擴容和ReHash),
那初始指定Capacity爲多少合適呢?
100=Capacity*LoadFactor,Capacity得出爲134(133.33取整)然後HashMap長度要爲2的冪,於是選擇128。
事情還沒有結束,將128代入上式可以很輕易的得出LoadFactor約爲0.78,大於了默認的0.75,所以此時要進行一次ReSize動作,還不如直接定位256。
Over