HashMap数据结构与实现原理解析(干货)
程序员文章站
2022-07-02 12:22:14
HashMap 数据结构解析: HashMap内部使用hash表(本质是一个数组见图一) HashMap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比ArrayList还要快) 同样的既然本质是数组则少不了扩容和复制数据的问题了,这与ArrayList的缺点是一样的 hash值相同 ......
hashmap 数据结构解析:
hashmap内部使用hash表(本质是一个数组见图一)
hashmap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比arraylist还要快)
- 同样的既然本质是数组则少不了扩容和复制数据的问题了,这与arraylist的缺点是一样的
hash值相同不能表示key完全相同,需要调用equals再次确认
如果key的hash值相同但是equals判断不相同,那么使用树结构或者链表来存储这些hash相同的元素,(具体使用哪种根据当前map中元素的数量,超过64个元素则使用树结构)
hash表的本质:
获取元素方法:
存储元素方法:
存储元素方法补充:
代码在putval方法的最后,当添加元素后的表的长度超过阈值时则直接扩容hash表
扩容/转换方法:
总结:
hashmap是使用hash表(本质是数组)来存储数据,
当key的hash值相同但是equals判断不同时使用链表(添加快,查询慢)
当元素数量超过64时则将链表转为树结构(添加慢,查询快)
推荐阅读
-
深入解析JS实现3D标签云的原理与方法
-
vue.js响应式原理解析与实现
-
SpringBoot整合log4j日志与HashMap的底层原理解析
-
Base64编码原理解析与Java实现
-
Base64编码原理解析与Java实现
-
并发编程(十三)—— Java 线程池 实现原理与源码深度解析 之 Executors(三)
-
并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之 DelayedWorkQueue
-
vue.js响应式原理解析与实现—实现v-model与{{}}指令
-
HashMap数据结构与实现原理解析(干货)
-
Java数据结构之平衡二叉树的原理与实现