- 计算对象的hashCode(),再进行HashMap的hash()方法进行二次哈希,最后&(数组容量-1)得到索引;
- 二次hash()是为了综合高维数据,让哈希分布更为均匀;
- 计算索引时,如果是2的n次幂可以使用位与运算代替取模,效率更高;扩容时hash值 & 原先容量 == 0的元素留在原来位置,否则新位置 = 旧位置+原先容量;
- 但前三个都是为了配合容量为2的n次幂时的优化手段,例如hashtable的容量就不是2的n次幂,并不能说哪种设计更优,应该是设计者综合了各种因素,最终选择了使用2的n次幂作为容量。
HashMap索引是如何计算的?hashCode都有了,为何还要提供hash()方法?数组容量为何是2的n次幂?
最新推荐文章于 2024-07-17 20:37:37 发布
本文探讨了如何通过二次哈希确保高维数据在HashMap中的均匀分布,重点介绍了2的n次幂容量的优势以及为何它与hashtable容量选择的不同。讲解了位与运算在计算索引时的高效应用,并揭示了容量扩容策略背后的逻辑。
摘要由CSDN通过智能技术生成