HashMap 中 get,put 方法源码实现
2024-09-06 04:20:34
HashMap 是Map接口的一个实现类
1、线程 HashMap 非线程安全
2、数据存储结构 hashMap采用Entity数组来存储 key-value对,每一个键值对组成一个Entity,键值对均允许为Null
3、数据结构 数组+链表(JDK1.7之前);数组+链表+红黑树(JDK1.8新增)
4、链表与红黑树之间的转换 数据类型转换的阈值,链表长度超过8的阈值后,就将链表结构转成红黑树结构,当红黑树结构长度阈值小于6,自动转成链表
5、 负载因子 0.75
6、初始化数组容量大小 hashMap初始Entity[]数组容量16,当容量达到阈值后,扩充的容量为bable的2倍,重新计算hash值
HashMap方法
1、HashMap继承结构 AbstractMap是Map的实现类,HashMap通过继承AbstractMap实现部分Map方法。
2、get(key) HashMap在获取值时,首先通过Key计算Hash值,获取表数据,根据hash值定位Entity元素,根据key值获取相应的value值。
3、put(key,value)同样先通过Key计算出hash值,作为数组的下标;首先获取内存中的数据,然后做了一系列的逻辑判断。
这里增加了一个红黑树转换的判断。 if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
最新文章
- 【bzoj1913】 Apio2010—signaling 信号覆盖
- 【bzoj1060】[ZJOI2007]时态同步
- if语句写在while语句外面效率更高
- Stackdump: 一个可以离线看stackoverflow的工具
- (转)Spring MVC
- MVC整个样例的源代码
- 实现koa中的generator用法
- asp.net在类库中使用EF 6.0时的相关配置
- WPF DataTrigger数据触发器
- cobbler自动化安装系统
- SQL语句取多列的最小值(排除0)
- android studio——Failed to set up SDK
- js实现复制文本内容到剪切板
- elementUi中的计数器ele-mumber中的change事件传参及事件调用
- NSIS 查找目录下的所有文件夹
- Eclipse——Note
- vue-preview的使用
- Linux3.10.0块IO子系统流程(4)-- 为请求构造SCSI命令
- 【转】VSCode Web开发插件
- 使用内省的方式操作JavaBean
热门文章
- 想学好Python,你必须了解Python中的35个关键词
- IDEA解决SVN频繁弹出登录框
- python文件处理-将图像根据坐标切割成若干小图
- 补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.
- TreeMap实现
- 洛谷 P1196 【银河英雄传说】
- 【k8s学习笔记】使用 kubeadm 部署 v1.18.5 版本 Kubernetes集群
- 我打算用JAVA实现GB/T32960 监控平台的tcp server
- python 请使用迭代查找一个list中最小和最大值,并返回一个tuple
- GitHub 热点速览 Vol.27:程序员的自我救赎——GitHub 摸鱼