- 计算对象的hashCode(),再进行HashMap的hash()方法进行二次哈希,最后&(数组容量-1)得到索引;
- 二次hash()是为了综合高维数据,让哈希分布更为均匀;
- 计算索引时,如果是2的n次幂可以使用位与运算代替取模,效率更高;扩容时hash值 & 原先容量 == 0的元素留在原来位置,否则新位置 = 旧位置+原先容量;
- 但前三个都是为了配合容量为2的n次幂时的优化手段,例如hashtable的容量就不是2的n次幂,并不能说哪种设计更优,应该是设计者综合了各种因素,最终选择了使用2的n次幂作为容量。
HashMap索引是如何计算的?hashCode都有了,为何还要提供hash()方法?数组容量为何是2的n次幂?
最新推荐文章于 2023-11-21 23:06:49 发布