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

HashMap知识总结

HashMap:

1.   扰动函数hash值右移16位与原hash值做异或运算得出的新hash值散列程度高.  2.   负载因子0.75,就是说一个数组初始化new HashMap(17)容量会比17最小2的n次方大,就是32,想要已空间换时间,就是负载因子小于0.75这样的话hash冲突更低,但是扩容频率更高.3    扩容,jdk1.7采用重新计算hash值的方式,1.8直接用hash右移16位高位与低位进行与运算得出低5位是否是0进行判断是否需要重新计算索引位置,0保持原位置,1数组长度加索引.

hashMap的put方法:

1   首先进行哈希值的扰动,获取一个新的哈希值。(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
2   判断tab是否为空或者长度为0,如果是则进行初始化扩容操作。
3   根据哈希值计算下标,如果对应下标正好没有存放数据,则直接插入即可否则需要覆盖.
4   判断tab[i]是否为树节点,否则向链表中插入数据,是则向树中插入节点。 
5   如果链表中插入节点的时候,链表长度大于等于8,并且tab桶大于64则需要把链表转换为红黑树。
6   最后所有元素处理完成后,判断是否超过阈值;threshold,超过则扩容

链表树化

1   链表树化的条件有两点;链表长度大于等于8、桶容量大于64,否则只是扩容,不会树化。
2   链表树化的过程中是先由链表转换为树节点,此时的树可能不是一颗平衡树。同时在树转换过程中
会记录链表的顺序,tl.next = p,这主要方便后续树转链表和拆分更方便。
3   链表转换成树完成后,在进行红黑树的转换。先简单介绍下,红黑树的转换需要染色和旋转,以及比对大小。

hashMap 的get方法:

1   扰动函数获取key的hash值
2   计算下标
3   获取桶下标位置,遍历链表红黑树
http://www.lryc.cn/news/162347.html

相关文章:

  • PLC编码器测速(限幅滤波+中心差分法求导SCL源代码)
  • SW的stp文件转成CAD格式文件学习笔记
  • 【数据结构】栈---C语言版(详解!!!)
  • sqlserver 联表查询、子查询、窗口函数、聚合函数等概念与例子
  • GO学习之 消息队列(Kafka)
  • 搭建自己的OCR服务,第三步:PPOCRLabel标注工具安装
  • Java学习笔记37——网络编程01
  • powershell 搜索文本并返回行号
  • 网络原理
  • 力扣(LeetCode)算法_C++——同构字符串
  • 网管实战⑼:配置华为S5720交换机
  • 文件上传漏洞第十六关十七关
  • Try llama2 in NUC (by quqi99)
  • 强大易用的开源 建站工具Halo
  • 如何使用vuex
  • 动手深度学习——Windows下的环境安装流程(一步一步安装,图文并配)
  • 个人博客系统-测试用例+自动化测试
  • C语言文件读写常用函数
  • 【C++基础】实现日期类
  • C语言程序设计—通讯录实现
  • 实战:大数据Flink CDC同步Mysql数据到ElasticSearch
  • B-Tree 索引和 Hash 索引的对比
  • 入门Python编程:了解计算机语言、Python介绍和开发环境搭建
  • 深度解析Redisson框架的分布式锁运行原理与高级知识点
  • C#扩展方法
  • uniapp 高度铺满全屏
  • UG\NX二次开发 判断向量在指定的公差内是否为零,判断是否是零向量 UF_VEC3_is_zero
  • 2023年MySQL实战核心技术第一篇
  • hivesql执行过程
  • C语言学习:8、深入数据类型