zoukankan      html  css  js  c++  java
  • 2021-01-21:java中,HashMap的读流程是什么?

    福哥答案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。
    ***
    [HashMap源码分析(jdk7)](https://www.cnblogs.com/fsmly/p/11278561.html)
    [JDK1.8中的HashMap实现](https://www.cnblogs.com/doufuyu/p/10874689.html)
    [评论](https://user.qzone.qq.com/3182319461/blog/1611183594)

  • 相关阅读:
    Nginx初探
    很详细的Nginx配置说明
    linux环境下Apache+Tomcat集群配置
    Apache+Tomcat集群配置
    apache + tomcat 负载均衡分布式集群配置
    js 如何将dom转换为 图片(base64)
    饥荒猪镇物品 代码
    angular2 图片赋值的时候前面自动加 unsafe:xxx 导致图片信息不显示问题
    angular6、7 兼容ie9、10、11
    @angular/cli (angular脚手架) 如何降级
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14310455.html
Copyright © 2011-2022 走看看