网站首页 > java教程 正文
大家好,今天讲解HashMap的数据结构,先看下思维导图从三个方面进行讲解:一、简单的数据结构。二、HashMap的数据结构。三、案例演示。
先看下Java中的数据结构有哪些?Java中提供了以下几种:数组链表栈队列哈希表。接下来看下概念,数组、寻址易、插山难练表、寻址难、插山易。而HashMap的数据结构就是使用了数组+链表的方式,在JDK1.8之前是数组+链表法,在JDK1.8中是数组+链表+红黑树,其目的是提高性能。看一下下面两张图,加深对HashMap的数据结构的理解。
下面来看一下HashMap的数据结构介绍。当我们向HashMap中添加键值对时,会涉及到哈希表哈希码,索引计算冲突处理和可能的扩容。下面我将通过一个案例来演示这些概念。
·假设要创建一个HashMap,存储员工的姓名和工资信息。
→一、创建HashMap。首先创建一个空的HashMap。
→二、添加键值对。接下来可以向HashMap中添加键值对,例如。
→三、哈希码和索引计算。
HashMap使用键的哈希码来计算键值对应的索引位置。在这个案例中键是字符串类型,所以需要计算每个键的哈希码。并用哈希码计算索引位置,例如假设键"Alice"的哈希码是209119。
HashMap的大小是16(默认初始大小),可以利用哈希码和HashMap大小计算索引位置。
→四、冲突处理。如果两个键计算得到的索引位置相同,则会发生冲突。
HashMap使用链表或红黑树来解决冲突。
在上述的情况下,假设"Alice"和"Charlie"的哈希码计算得到的索引位置相同,即索引位置为3HashMap的数据结构如下。
因为发生了冲突,"Alice"和"Charlie"被存储在同一个桶(Bucket)中。使用链表(或红黑树取决于桶内的元素数量),将它们连接在一起。
·5扩容:如果HashMap中的键值对数量超过了载荷因子(默认为0.75),HashMap将会进行扩容,以保持较低的冲突率和较高的性能。
在扩容过程中HashMap会创建一个新的数组,将存储的键值对重新计算索引位置,并重新分配到新的桶中,这样可以减少冲突的发生并提高性能。
当面试官问到HashMap的数据结构时,可以这样回答。
猜你喜欢
- 2024-09-11 阿里架构师剖析:Redis常用数据类型对应的数据结构
- 2024-09-11 聊聊经典数据结构HashMap,逐行分析每一个关键点
- 2024-09-11 压箱底Redis面试集-48.Redis 的 ListPack 数据结构是什么?
- 2024-09-11 JAVA进阶知识学习-day03 数据结构&List集合&Set集合
- 2024-09-11 Java数据结构面试必问:HashMap 底层实现原理分析
- 2024-09-11 Java路径-31-Java数据结构(我的世界java路径错误怎么办)
- 2024-09-11 《数据结构》第九篇、java中ArrayList源码解析
- 2024-09-11 JDK源码分析--Object(jdk1.8源码详细介绍)
- 2024-09-11 「Java数据结构」Java对象的比较(java对比两个对象属性的变化)
- 2024-09-11 动图+源码,演示Java中常用数据结构执行过程及原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)