当前位置: 首页 > article >正文

HashMap如何put一个数值

1.根据key计算一个hash值。

2.在put的时候判断数组是否存在,如果不存在调用resize方法创建默认容量为16的数组。

3.确定node在数组中的位置,根据hash值和数组的最大索引值进行与运算得到索引的位置。

4.获取该位置是否有元素,如果没有元素,直接创建一个node放在该位置。

5.如果有元素,判断key是否完全相等,如果相同,把原来的node赋值给一个变量。

6.再去判断此位置是红黑树还是链表。

7.如果是红黑树,则以红黑树的方式将node放在红黑树上。

8.如果是链表,就遍历链表,把node放在最后一位,放完之后需要去判断链表的长度是否超过8,如果超过就需要判断是否将链表转换为红黑树,当数组容量小于64的时候,只会对数组进行扩容,如果数组容量大于64,才会进行链表转红黑树。

9.返回被覆盖的值。

10.判断整个数组是否需要扩容(是否达到75%---负载因子,最大值2^30)

如果HashMap在扩容时发现当前红黑树如果小于6才会转化为链表


http://www.kler.cn/news/340666.html

相关文章:

  • 【算法笔记】双指针算法深度剖析
  • 喜马拉雅FM车机版 2.0 | 车载音频利器,免登录无广告
  • REINFORCEMENT LEARNING THROUGH ACTIVE INFERENCE
  • 【python 简易入门应用教程】第二部分:数据处理与分析
  • ROS2初级面试题总结
  • 每天一道面试题(8):垃圾收集器GC中的Humongous Regions是什么??
  • Coggle数据科学 | 全球AI攻防挑战赛:金融场景凭证篡改检测 baseline
  • 晶体管最佳效率区域随频率逆时针旋转原因分析
  • express 中环境变量配置
  • 手撕SwiGLU和GELU
  • 基于依赖注入技术的.net core WebApi框架创建实例
  • 前端开发中的高级技巧与最佳实践
  • 天气API接口调用
  • 【树形DP】AT_dp_p Independent Set 题解
  • yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】
  • 【2024】前端学习笔记11-网页布局-弹性布局flex
  • 【C++】输入输出缺省参数
  • k8s的pod管理及优化
  • linux线程 | 一篇文章带你理解线程的概念
  • STM32单片机(F03C8T6)-点灯(寄存器点灯和库函数点灯)