HashMap - 底层原理

HashMap - 底层原理

HashMap底层用的就是hash表数据结构,即数组和链表或红黑树

  1. 当我们向HashMap中Put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标

  2. 存储时,如果出现hash值相同的key,会有2种情况

    1. 如果key相同,那么就会覆盖原数据
    2. 如果key不相同,就说明出现了冲突,则将当前的key-value放入链表或红黑树中。(链表的长度大于8数组的长度大于64,那么链表才会转换为红黑树)
  3. 获取数据时,直接找到对应的hash值对应下标,再进一步判断key是否相同,从而找到对应值,如果是链表就要遍历链表查,如果是红黑树就要到红黑树中查

HashMap的jdk1.7和jdk1.8有什么区别?

jdk1.8之前,采用的是 hash表 +数组+链表,来解决hash冲突的问题,并没有采用红黑树。

jdk1.8以后,采用了红黑树+链表的方式,当链表的长度大于8,数组的长度大于64的时候,就会采用红黑树来解决问题。

HashMap的底层原理

  1. 底层采用hash表数据结构 + 数组 + (链表或红黑树)

  2. 添加数据时,计算key的hash值,找到数组的下标

    1. 如果key相同替换原内容
    2. key不同,存入链表或红黑树
  3. 获取数据,计算key的hash值,获取元素

相关推荐
黎雁·泠崖1 天前
Java字符串高阶:底层原理深剖+经典面试题全解
java·开发语言
重生之我是Java开发战士1 天前
【Java SE】反射、枚举与Lambda表达式
java·开发语言
weixin_436525071 天前
若依多租户版 - @ApiEncrypt, api接口加密
java·开发语言
Hello.Reader1 天前
Flink Java 版本兼容性与 JDK 模块化(Jigsaw)踩坑11 / 17 / 21 怎么选、怎么配、怎么稳
java·大数据·flink
TechPioneer_lp1 天前
小红书后端实习一面|1小时高强度技术追问实录
java·后端·面试·个人开发
TH_11 天前
37、SQL的Explain
java·数据库·sql
康王有点困1 天前
Flink部署模式
java·大数据·flink
EndingCoder1 天前
属性和参数装饰器
java·linux·前端·ubuntu·typescript
芒克芒克1 天前
LeetCode 134. 加油站(O(n)时间+O(1)空间最优解)
java·算法·leetcode·职场和发展
huahailing10241 天前
Spring 循环依赖终极解决方案:从原理到实战(附避坑指南)
java·后端·spring