简介:岁月磨平了人的棱角,让我们不敢轻易的去放手,即使它在你心中并不那么重要,你依旧害怕失去它,不是舍不得,是内心的迷茫。              

一 : 创建HashMap

  HashMap<Object, Object> hashMap = new HashMap<>();

源码1

解读:初始化this.loadFactor(0.75),改值做为一个负载因子,当负载比数大于它时,就会扩容一倍数组容量( >>1)

二:插入新值到HashMap中

hashMap.put(1, 1);
hashMap.put(2, 1);

源码2:

解读:仅计算了key的hash值,然后传递给下面代码

解读:

步骤1.第一个IF判断赋值后判断table是否为null --> true {初始化table(resize)和赋值n}

步骤2.第二个IF(通过数组长度和key的hash值的位运算与&,计算key所在的数组索引->赋值并判断改位置是否位null)?-->true{若为null,说明key不存在,新建node节点并赋值改数组位置}

步骤3.承接2的第二个IF == false,即该位置存在数据节点p。第三个IF(通过短路与(&&)判断p的hash值和p的key值和参数key是否相等)-->true{说明key已经存在,并赋值e位该节点}

步骤4.承接3的第三个IF == false, 即该节点P的key不是不参数key。else if (判断该节点P是否位树节点) -->true{是树节点,把新值插入树节点,并返回值赋值给e}

步骤5.承接4的else if  == false,即该节点是链表节点。然后for迭代链表节点然后判断,第一个IF(判断该节点的下一个节点是否位null)?-->true{新建节点值并赋值给节点} ,紧跟第二个IF(判断迭代的次数是否大于(8-1)即8次)?-->true{说明该链表长度大于8,然后链表转换为红黑树},然后迭代结束。第三个IF,承接第一个IF即该节点不为null,然后步骤3判断一样

步骤6.IF判断e是否不为null?-->true{旧值返回,并退出}

步骤7.承接第二步的 IF == true,说明在数组的新的位置插入了新数据,然后IF判断(数组的填充数是否大于数组的长度乘以负载因子)?-->true{扩容数组}

步骤8.空的方法

三:获取HashMap中的值

hashMap.get(1);

解读:计算key的hash值,并把hash值和key传入getNode方法

解读:

步骤1.第一个IF(利用短路与(&&)判断table是否为null和table的长度和位运算与(&)找出hash值对应的数组索引并赋值first判断是否位null)

步骤2.承接步骤1 if==true,IF(判断key是否相等)?-->true{返回该节点}

步骤3.承接步骤2 IF == false,第一个IF(赋值并判断为 null),第二个IF(判断该节点是否位树节点)?-->true{通过树查找并返回退出},第三个IF 在do{}while内,承接第二个IF==false,即链表节点,查找并返回退出

步骤4.返回null,即查找的值不存在

最新文章

  1. eclipse启动优化,终于不那么卡了!
  2. LINQ to SQL语句(15)之String
  3. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用
  4. JSP EL表达式
  5. asp.net中的绝对路径和相对路径
  6. mysql和VS2010 C++链接过程中出现的问题
  7. C++ Placement New
  8. 使用VSCode如何调试C#控制台程序_2_加深总结
  9. java 中+的运算规则
  10. C++ thread类多线程编程
  11. C#执行Sql 时,出现“算术运算导致溢出”问题,如何解决?
  12. MySQL中的索引的引用
  13. 【ZZ】Web开发的入门指导 | 菜鸟教程
  14. 待解决:2bootstrap-cerulean.css Failed to load resource: the server responded with a status of 404 ()
  15. 【Python】self的用法扫盲
  16. JavaSE---反射(未完待续)
  17. vue2.0之监听属性的使用心得及搭配计算属性的使用
  18. 搭建局域网maven仓库
  19. 【.Net Core 学习系列】-- EF Core 实践(Code First)
  20. 极简版OKEX比特币跨期对冲策略

热门文章

  1. react : umi 引入 antd 踩坑
  2. DNS反向查询
  3. accpet和connect设置超时
  4. WebApiClientCore简约调用百度AI接口
  5. 本地ES集群数据通过_reindex方式迁移到腾讯云服务器(亲测有效)
  6. VS Code 上那些沙雕插件
  7. 说出来也许你不信,我被 Linux 终端嘲笑了……
  8. python的pyc文件
  9. Spring集成CXF发布WebService并在客户端调用
  10. SpringBoot2 整合MinIO中间件,实现文件便捷管理