HashMap
来源:互联网 发布:sql注入攻击视频 编辑:程序博客网 时间:2024/05/17 09:32
HashMap的容量是有限的。当经过多次元素插入,使得HashMap达到一定饱和度时,Key映射位置发生冲突的几率会逐渐提高。
这时候,HashMap需要扩展它的长度,也就是进行Resize。
影响发生Resize的因素有两个:
1.Capacity
HashMap的当前长度。上一期曾经说过,HashMap的长度是2的幂。
2.LoadFactor
HashMap负载因子,默认值为0.75f。
衡量HashMap是否进行Resize的条件如下:
HashMap.Size >= Capacity * LoadFactor
1.扩容
创建一个新的Entry空数组,长度是原数组的2倍。
2.ReHash
遍历原Entry数组,把所有的Entry重新Hash到新数组。为什么要重新Hash呢?因为长度扩大以后,Hash的规则也随之改变。
让我们回顾一下Hash公式:
index = HashCode(Key) & (Length - 1)
当原数组长度为8时,Hash运算是和111B做与运算;新数组长度为16,Hash运算是和1111B做与运算。Hash结果显然不同
此时,问题还没有直接产生。当调用Get查找一个不存在的Key,而这个Key的Hash结果恰好等于3的时候,由于位置3带有环形链表,所以程序将会进入死循环!
总结:
1.Hashmap在插入元素过多的时候需要进行Resize,Resize的条件是
HashMap.Size >= Capacity * LoadFactor。
2.Hashmap的Resize包含扩容和ReHash两个步骤,ReHash在并发的情况下可能会形成链表环。
阅读全文
0 0
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- HashMap
- HashMap
- hashmap
- HashMap
- Hashmap
- 【第二届蓝桥杯】概率问题
- 验证HTML5的hidden属性
- axios可以解决跨域访问的问题吗?
- jquery ui实现拖拽文件到文件夹及拖出
- 将本地文件上传到github
- HashMap
- Gini coefficient直观的解释与实现
- 欢迎使用CSDN-markdown编辑器
- WeakReference
- Selenium(二)
- 【Java 八进制转换十进制】POJ
- AgileEAS.NET SOA 中间件/敏捷软件开发平台
- Spring + jdbcJdbcTemplate 配置声明式事务
- Android获取联系人信息[名字,手机,电话,公司名称,昵称]