AI
推荐
模板社区
专题
登录
免费注册
首页
思维导图
详情
HashMap
2018-04-17 16:45:33
0
举报
分享方式
仅支持查看
AI智能生成
hashmap
hashmap
ConcurrentHashMap
模版推荐
作者其他创作
大纲/内容
1. 初始化<br>
1. 初始容量(默认是16)<br>
2. 负载因子(默认是0.75)<br>
3. 容量的数量就是桶的数量; 当超过负载因子*容量这个阈值,那么hashmap就会扩容<br>
2. put操作<br>
1. 当key为null时<br>
1. 判断null的桶是否为空<br>
为空,直接插入一个Entry
不为空,替换该Entry的value值
2. 当key不为null<br>
2. 计算key hashcode的hash值<br>
3. 计算hash值所在的桶位置<br>
4. 判断桶位置是否已经存在数据<br>
1. 没有数据,那么就桶的头部插入该键值对<br>
2. 如果有数据,那么就判断链表中的每一个数据的key equal 新加的key<br>
如果相等,那么直接替换value
如果不相等,那么就在桶的头部插入该键值对
3. addEntry添加Entry操作<br>
1. 根据桶的索引,获取链表<br>
2. 新建一个Entry节点插入链表<br>
3. 如果有需要,扩容,当前容量的2倍<br>
4. get操作<br>
1. 当key为null<br>
1. 获取value值(可以为null)<br>
2. 当key不为null<br>
1. 获取桶位置<br>
2. 在链表中判断等key的value,返回该value<br>
3. 不存在key<br>
返回null值<br>
ConcurrentHashMap
子主题
1. put操作
1. value为null<br>
抛出异常
2. value不为null<br>
1. 通过hash的高位获取segmens的索引值<br>
2. 对segment上锁<br>
3. 容量不满足,扩容<br>
4. 定位到具体的桶<br>
5. 在桶上判断key是否存在<br>
1.如果存在
替换新值,返回旧值<br>
2. 如果不存在<br>
添加一个节点,放置在链表头部,返回null
6. 释放锁<br>
子主题
2. get操作<br>
1. 根据hash定位到段,委托segment.put()<br>
2. 判断是否有桶的hash值与hash值相等<br>
1. 如果相等<br>
找到指定value
1 value为null<br>
加锁从新获取
2 value不为nul<br>
返回value
2. 如果不相等<br>
返回null
3. rehash操作<br>
1. 扩容2倍<br>
2. 在具体的segment上重哈希<br>
3. 重哈希都是针对单独的一个segment进行操作,也就是说最后个个段上桶的数量可能不相等<br>
收藏
立即使用
HashMap
穿可贴
职业:本科
去主页
Collect
Get Started
HashMap扩容
Collect
Get Started
HashMap
Collect
Get Started
HashMap
Collect
Get Started
HashMap
评论
0
条评论
下一页
图形选择
思维导图
主题
补充说明
AI生成
修改AI描述
去编辑
重新生成
提示
关闭后当前内容将不会保存,是否继续?
取消
确定
Document