博客
关于我
2021-01-21:java中,HashMap的读流程是什么?
阅读量:265 次
发布时间:2019-03-01

本文共 774 字,大约阅读时间需要 2 分钟。

福哥答案2020-01-21:

jdk1.7读流程:

1.key是否为空值null,如果为空,直接遍历table[0]链表,寻找key==null键。调用的是getForNullKey()方法。如下:
1.1.如果元素个数为0,直接返回null。
1.2.遍历table[0]。
1.3.遍历到了,返回值;没遍历到,返回null。
2.key不为空,获取entry。调用getEntry方法。
2.1.如果元素个数为0,直接返回null。
2.2.计算hash。如果key为null,hash值是0;如果不为0,调用hash()方法。
2.3.计算索引位置。调用indexFor()方法。
2.4.遍历table[索引]。哈希相等,key相等(【==相等】或者【key不为空并且equals()相等】),这种情况就算找到了。
2.5.遍历到了,返回值;没遍历到,返回null。
3.如果entry为空,返回空;如果entry不为空,返回entry的value值。

jdk1.8读流程:

1.计算哈希。调用hash()方法。
2.调用getNode()方法获取node对象。
2.1.table数组已经初始化,长度大于0,根据hash寻找table中的项也不为空。
2.2.table[索引]中的first元素的key相等,直接返回node;不相等,执行下一步骤2.3。
2.3.如果first元素的next节点存在,继续下一步骤2.4。
2.4.如果first元素是TreeNode,调用getTreeNode()方法。
2.4.1.获取root节点。
2.4.2.调用find方法,获取TreeNode对象。
2.5.如果first元素不是TreeNode,遍历链表。
3.如果node对象为空,直接返回null;如果不为空,返回e.value。


转载地址:http://vkqo.baihongyu.com/

你可能感兴趣的文章
ie http 中文传参 400错误
查看>>
JAVA_集合
查看>>
mvc+webservice+存储过程分页
查看>>
openlayer展示热力图
查看>>
mongodb中文档的特殊更新--upsert、remove(根据条件删除数据 )
查看>>
微信小程序中的自定义组件
查看>>
HTML表单跨行跨列操作
查看>>
Eclipse-更改Eclipse中SVN用户名及密码
查看>>
Mybatis-PageHelper分页插件-Spring
查看>>
MyBatis5_动态SQL
查看>>
Linux-账号管理
查看>>
网络相关面试题
查看>>
阿里一二三面、HR面面经-后台
查看>>
【9月打卡~Leetcode每日一题】347. 前 K 个高频元素(难度:中等)
查看>>
MongoDB__数据库_创建_删除
查看>>
MongoDB_集合_创建_删除
查看>>
MongoDB_文档_查询
查看>>
循环整形集合,用逗号拼成字符串的小锦囊~(去掉最后一个逗号)
查看>>
java:-source 1.6 中不支持 diamond 运算符
查看>>
单链表的查找、建立操作(C语言)
查看>>