HashMap为何扩容长度是2的幂

HashMap的key怎么处理?

  • HashMap的key使用的是hash算法,就是为了减少碰撞。生成int类型数据好定位数组中的位置。
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

0-10亿的数据均匀添加到5个集合怎么实现?

  • 简单高效的做法就是:

n%5就可以了。
比如:11%5=1,12%5=2,13%5=3,14%5=4,15%5=0,16%5=1,17%5=2.......
11,16...集合一;12,17...集合二

Hash下表怎么计算呢?

  • Key通过hash算法后取值的范围是40亿左右(-2147483647~2147483647)之间。而把这么多数据放到特定长度size的数组。最简单的就是通过hash%size,就找到下标了。
  • 而当size是2的幂时;(hash & (size-1)) == hash%size。而&运算效率高。
posted @ 2021-02-27 11:09  小小的泥巴  阅读(65)  评论(0编辑  收藏  举报