返回信息流rt,为什么不是8,32,64这种2的n次方大小。
这是一条镜像帖。来源:北邮人论坛 / java / #57484同步于 2017/9/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java中HashMap初始大小为什么是16
nihaoa
2017/9/13镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
应该就是一个经验值,至于table的大小为什么是2的幂次,这是为了实现hash的单调性:当扩容时,对于槽位i中的节点,其去向只有两个,其一是新表的槽位i;其二是新表的槽位(i+originTableLength)
感觉这里这样做的目的不是为了实现单调性,而是恰好好像满足了单调性的要求,因为在这hashmap中完全不需要满足单调性?
【 在 liuyehcf 的大作中提到: 】
: 应该就是一个经验值,至于table的大小为什么是2的幂次,这是为了实现hash的单调性:当扩容时,对于槽位i中的节点,其去向只有两个,其一是新表的槽位i;其二是新表的槽位(i+originTableLength)
另外一点就是槽位计算可以用与运算((tableLength-1)&hash),提高效率。对于ConcurrentHashMap而言,我觉的单调性非常重要,如果一个槽位中的节点在扩容时会分配到新表任意一个槽位的话,那么就不能加槽位锁了,只能对整个table加锁,也就无法并发扩容了,这很影响效率(ConcurrentHashMap是并发扩容的)。
另外,可以说下你对表长度设计成2的幂次的理解么
【 在 cc19931002 的大作中提到: 】
: 感觉这里这样做的目的不是为了实现单调性,而是恰好好像满足了单调性的要求,因为在这hashmap中完全不需要满足单调性?