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值,获取元素

相关推荐
xiaoye37082 小时前
Java 自动装箱 / 拆箱 原理详解
java·开发语言
YDS8294 小时前
黑马点评 —— 分布式锁详解加源码剖析
java·spring boot·redis·分布式
迷藏4944 小时前
**发散创新:基于 Rust的开源权限管理系统设计与实战**在现代软件架构中,**权限控制**早已不
java·开发语言·rust·开源
升鲜宝供应链及收银系统源代码服务4 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
daidaidaiyu5 小时前
Nacos实例一则及其源码环境搭建
java·spring
小江的记录本5 小时前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
摇滚侠5 小时前
Java 项目《谷粒商城-1》架构师级Java 项目实战,对标阿里 P6-P7,全网最强,实操版本
java·开发语言
zihao_tom5 小时前
Spring Boot(快速上手)
java·spring boot·后端
hua872226 小时前
SpringSecurity之跨域
java
小王不爱笑1326 小时前
G1 GC 的核心基础:Region 模型的补充细节
java·jvm·算法