在前几天面试中软的时候,面试官问了我这么一个问题:如果已知容量为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