美文网首页
HasMap为什么要满足2的n次方

HasMap为什么要满足2的n次方

作者: 潘志杰_34fd | 来源:发表于2019-07-14 21:43 被阅读0次

至于为什么是2的30次方,不是别的数字或者最大整数,这主要是从性能和分布均匀两方面来考虑的:

加快hash计算速度;

均匀分布,减少hash冲突;

2的n次方,可以通过位移操作来实现,可以加快hash计算速度,结合按位与计算加快数组下标的计算。例如在HashMap做扩容时,满足2的幂就是相当于每次扩容都是翻倍(就是<<1右移一位),这样扩容时在重新计算下标位置时,只有两种情况,一种是下标不变,另一种是下标变为:原下标位置+扩容前容量,这样扩容后节点移动相对较少,也可以提高性能。。

可以改善数据的均匀分布,减少hash冲突,毕竟hash冲突越大,代表数组中一个链的长度越大,这样的话会降低hashmap的性能。

其中关键代码为HashMap中的数组下标计算:i = (n - 1) & hash,该计算方法可以实为什么要满足2的n次方

至于为什么是2的30次方,不是别的数字或者最大整数,这主要是从性能和分布均匀两方面来考虑的:

加快hash计算速度;

均匀分布,减少hash冲突;

2的n次方,可以通过位移操作来实现,可以加快hash计算速度,结合按位与计算加快数组下标的计算。例如在HashMap做扩容时,满足2的幂就是相当于每次扩容都是翻倍(就是<<1右移一位),这样扩容时在重新计算下标位置时,只有两种情况,一种是下标不变,另一种是下标变为:原下标位置+扩容前容量,这样扩容后节点移动相对较少,也可以提高性能。。

可以改善数据的均匀分布,减少hash冲突,毕竟hash冲突越大,代表数组中一个链的长度越大,这样的话会降低hashmap的性能。

其中关键代码为HashMap中的数组下标计算:i = (n - 1) & hash,该计算方法可以实现一个均匀分布。现一个均匀分布。

相关文章

网友评论

      本文标题:HasMap为什么要满足2的n次方

      本文链接:https://www.haomeiwen.com/subject/pivikctx.html