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

相关推荐
小怪吴吴16 小时前
idea 开发Android
android·java·intellij-idea
嘻嘻哈哈樱桃16 小时前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
一次旅行16 小时前
IDEA安装CC GUI新手指南
java·ide·intellij-idea
超梦dasgg16 小时前
Spring AI 智能航空助手项目实战
java·人工智能·后端·spring·ai编程
counting money17 小时前
Spring框架基础(配置篇)
java·后端·spring
秋917 小时前
OceanBase与GreatSQL在Java应用中的性能调优方法有哪些?
java·开发语言·oceanbase
今天又在写代码17 小时前
并发问题解决
java·开发语言·数据库
老王以为18 小时前
前端视角下的 Java
java·javascript·程序员
看腻了那片水18 小时前
开源一个对业务代码零侵入的透明数据治理框架 —— 【sangsang】
java·mybatis