前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021-01-21:java中,HashMap的读流程是什么?

2021-01-21:java中,HashMap的读流程是什么?

原创
作者头像
福大大架构师每日一题
修改2021-01-22 11:00:53
2660
修改2021-01-22 11:00:53
举报

福哥答案2020-01-21:

jdk1.7读流程:

1.key是否为空值null,如果为空,直接遍历table0链表,寻找key==null键。调用的是getForNullKey()方法。如下:

1.1.如果元素个数为0,直接返回null。

1.2.遍历table0。

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。


HashMap源码分析(jdk7)

JDK1.8中的HashMap实现

评论

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档