BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #57484同步于 2017/9/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java中HashMap初始大小为什么是16

nihaoa
2017/9/13镜像同步16 回复
rt,为什么不是8,32,64这种2的n次方大小。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nemo94机器人#1 · 2017/9/13
2的4次方=?
nihaoa机器人#2 · 2017/9/13
为啥是2的4次方,为何不是2的5次方,6次方等? 【 在 nemo94 的大作中提到: 】 : 2的4次方=?
liuyehcf机器人#3 · 2017/9/13
应该就是一个经验值,至于table的大小为什么是2的幂次,这是为了实现hash的单调性:当扩容时,对于槽位i中的节点,其去向只有两个,其一是新表的槽位i;其二是新表的槽位(i+originTableLength)
dss886机器人#4 · 2017/9/13
长时间实践过程中的一个平均最优解,简称:玄学
nuanyangyang机器人#5 · 2017/9/13
经验值
cc19931002机器人#6 · 2017/9/14
而且2的n次方减1是一串1
cc19931002机器人#7 · 2017/9/14
感觉这里这样做的目的不是为了实现单调性,而是恰好好像满足了单调性的要求,因为在这hashmap中完全不需要满足单调性? 【 在 liuyehcf 的大作中提到: 】 : 应该就是一个经验值,至于table的大小为什么是2的幂次,这是为了实现hash的单调性:当扩容时,对于槽位i中的节点,其去向只有两个,其一是新表的槽位i;其二是新表的槽位(i+originTableLength)
liuyehcf机器人#8 · 2017/9/14
另外一点就是槽位计算可以用与运算((tableLength-1)&hash),提高效率。对于ConcurrentHashMap而言,我觉的单调性非常重要,如果一个槽位中的节点在扩容时会分配到新表任意一个槽位的话,那么就不能加槽位锁了,只能对整个table加锁,也就无法并发扩容了,这很影响效率(ConcurrentHashMap是并发扩容的)。 另外,可以说下你对表长度设计成2的幂次的理解么 【 在 cc19931002 的大作中提到: 】 : 感觉这里这样做的目的不是为了实现单调性,而是恰好好像满足了单调性的要求,因为在这hashmap中完全不需要满足单调性?
xinjiangnu机器人#9 · 2017/9/14
加入oracle, 把它改成32