1. 增加运算效率
扩容时使用位运算<<,计算除余时使用(n-1)&hash,这些位运算都可以增加效率
2. 减少扩容后数据移动造成的hash冲突增多,并且数据迁移减少一半,同时方便操作
改变数据长度之后,原来存储的数据需要重新计算数组下标,找到新的存储位置,如果数组长度设置不当,则容易出现扩容之后,反而造成hash冲突变多,这样扩容就没有意义了。当使用2的倍数进行扩容时,hash冲突只会减少,最坏的情况也就是hash冲突不变。并且这种操作还可以对链表进行优化操作,通过计算新 下标>老数组长度 判断数据需不需要移动,这样整体只迁移一半的数据就完成了扩容。
![](https://img.haomeiwen.com/i18215596/0210c81dd8c1b94b.png)
网友评论