首页 > 其他 > 详细

关于HashMap的问题

时间:2019-07-31 14:35:19      阅读:127      评论:0      收藏:0      [点我收藏+]

1.HashMap数组长度为啥是2的幂次方?

答:定位数组下标采用的是 哈希值%数组长度,即 hash(key)%M  ;因为%运算效率比较低,如果M是2的幂次方则会有这一特性 hash(key)%M = hash(key) & (M-1) ,而位运算与的效率比较高,HashMap就是采用 hash(key) & (M-1)来定位数组下标的;

 2.HashMap中hash方法为啥将hash值这么定义?

(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

h与h无符号右移16位的结果进行抑或操作;

如果直接采用key.hashCode(),那么定位数组下标的过程中可能用不到高位信息,这里采用抑或操作是将高位信息混合到低位,来降低哈希冲突;为啥用抑或而不是&或者|呢?&的会让结果向0靠拢(0 & 0 =0 ,0 & 1 = 0,1 & 0 =0,1 & 1 =1),|会让结果向1靠拢(0 | 0 = 0,0 | 1 =1,1 | 0 =1,1 | 1 =1),最终结果都不够平衡。

 

关于HashMap的问题

原文:https://www.cnblogs.com/mylittlecabin/p/11275655.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!