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。而&运算效率高。