HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?( 二 )
----HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?//---- http://
HashMap是常考点 , 而一般不问List的几个实现类(偏简单) 。 以下基于JDK1.8.0_102分析 。
JDK版本:oracle java 1.8.0_102
内部存储
HashMap的内部存储是一个数组(bucket) , 数组的元素Node实现了是Map.Entry接口(hash key value next) , next非空时指向定位相同的另一个Entry , 如图:
容量(capacity)和负载因子(loadFactor)
简单的说 , capacity就是bucket的大小 , loadFactor就是bucket填满程度的最大比例 。 当bucket中的entries的数目(而不是已占用的位置数)大于capacity*loadFactor时就需要扩容 , 调整bucket的大小为当前的2倍 。 同时 , 初始化容量的大小也是2的次幂(大于等于设定容量的最小次幂) , 则bucket的大小在扩容前后都将是2的次幂(非常重要 , resize时能带来极大便利) 。
推荐阅读
- 左慈|三国杀:技能缝接,超强发挥,用左慈就能实现
- 商人|游戏商人的月入百万是真的吗?揭秘真实的剑三游戏商人真实现状
- fly|从电竞迈向艺术:Fly选手实现人生跨越,成历史第一人!
- 赤色要塞|玩经典游戏《赤色要塞》魔改版:吉普车也能用激光炮,童年梦想实现了
- 手机游戏|梦幻西游手游:封系统治擂台?浅谈经脉学问,方寸也能实现双封!
- 魂斗罗|“为什么魂斗罗内存这么少,却可以实现那么长的剧情?”
- rw战队|KPL前瞻:Hero对阵RW侠首发公布,黑鲸的Flag真有可能实现
- 单机|《仙剑奇侠传七》逆风翻盘!蒙尘的老牌IP,终于实现了自我救赎
- LGD|Ti10:LGD实现逆天翻盘锁定总决赛,虎牙Sccc激动到泪目
- 美好世界|“我们的工作只是实现人类的愿望,而不是创造一个我们认为的《美好世界》”