HashMap的put方法执行过程可以通过下图来理解,自己有兴趣可以去对比源码更清楚地研究学习。

①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容;

②.根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③;

③.判table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals;

④.判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对,否则转向⑤;

⑤.遍历table[i],判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作;遍历过程中若发现key已经存在直接覆盖value即可;

⑥.插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容。

最新文章

  1. Ubuntu学习总结-09 安装 Pycharm
  2. Mysql插入数据为何要加上" ` "(Esc下面那个按键符号)?
  3. Kernel Methods (3) Kernel Linear Regression
  4. Error: Could not access the Package Manager. Is the system running?
  5. Thread create 创建进程
  6. MVP MVC MVVM 傻傻分不清
  7. 转载 Javascript继承两种形式详解
  8. EXT学习之——Ext下拉框绑定以及级联写法
  9. .Net 使用 Oracle 提供组件访问数据库
  10. [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]
  11. tbr tbn tbc
  12. 嵌入式系统 Boot Loader
  13. [TJOI2015]旅游
  14. java中用MessageFormat格式化json字符串用占位符时出现的问题can't parse argument number
  15. 使用openresty && minio && thumbor 构建稳定高效的图片服务器
  16. recovery log直接输出到串口
  17. [软件研究]对AMH面板的研究
  18. [工具]Cobalt Strike 3.13 TeamServer for Windows
  19. 什么是@guid
  20. 2-初步了解C#-类与对象

热门文章

  1. 【转】SQL Server编程游标
  2. 设置webView头部不能滑动
  3. jQuery中通过$.browser来判断浏览器
  4. Python开发【Django】:CMDB基础
  5. Python并行编程(十二):进程同步
  6. SHFileOperation的用法
  7. Mirror--镜像使用的工作线程数
  8. centos 文档的压缩和打包 gzip,bzip2,xz,zip,unzip,tar,tgz 第九节课
  9. C++中的常量定义
  10. Js中的filter()方法