返回顶部
首页 > 资讯 > 后端开发 > Python >JAVA进阶之HashMap底层实现解析
  • 318
分享到

JAVA进阶之HashMap底层实现解析

2024-04-02 19:04:59 318人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

首先我们来通过下面的图看看jdk1.7时代的HashMap是如何通过数组+链表的形式进行值储存的。 由图中的描述可以清楚地看出来,当数组第一次被定义并且第一次被赋值的时候,这个时候

首先我们来通过下面的图看看jdk1.7时代的HashMap是如何通过数组+链表的形式进行值储存的。

由图中的描述可以清楚地看出来,当数组第一次被定义并且第一次被赋值的时候,这个时候的操作很简单,就是将这个值赋值到我们的table数组上面去。这个操作完成以后,然后我们进行二次put:

如图左下角描述所示的情况,当数组table下标出现了相等的情况的时候,此时此刻还是将肝铁侠2的值赋值给tablle[i]的,这里讲述的是JDK1.7版本下HashMap中插入的头插法,而JDK1.8版本中是用的尾插法。插入以后,我们要让数组指向链表的头部,那么链表的头部也就是头节点是不是就是table[i]的位置呀。

如上,最终插入完成以后的模型就是这样的:

那我们此时此刻是不是就可以大胆地猜测,在HashMap中,使用map.get(“name”)获取到它的value的时候,是不是就是通过int hash = “name”.hashcode,然后获取到对应table下的数组下标int i = hash % table.length获取到table[i]的具体位置的链表,然后再通过hash去对应table[i]上的链表中找到对应的值呢?

有了这个思维,我们再去看HashMap的源码就会轻松许多许多。下一期为大家带来HashMap的手动实现。

再顺带两个基本的关于HashMap的问题:

HashMap底层是怎么实现的呢?

在JDK1.7中是通过数组+链表实现的。JDK1.8中是通过数组+链表+树(红黑树)组成的。

为什么要用链表呢?

①HashMap数组元素为链表的时候,插入直接使用头插,插入复杂度O(1),即操作的数量为常数,与输入的数据的规模无关,效率是非常快的;当链表较短时候,查找数据时对性能并没有什么影响,但是如果链表一长,查找起来就很影响性能了。

②在Java8中,如果链表长度到达了8个,就会转化为红黑树,提高了查找的性能,但每次插入新的数据,都得维护红黑树的结构,复杂度为O(log n)。其实算是对查找和插入元素时性能的一个权衡,毕竟存入的效果就是用来查询的。

这个问题的答案不唯一,可以自行了解一下。

以上就是JAVA进阶之HashMap底层实现解析的详细内容,更多关于HashMap底层实现的资料请关注编程网其它相关文章!

--结束END--

本文标题: JAVA进阶之HashMap底层实现解析

本文链接: https://lsjlt.com/news/158035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JAVA进阶之HashMap底层实现解析
    首先我们来通过下面的图看看JDK1.7时代的HashMap是如何通过数组+链表的形式进行值储存的。 由图中的描述可以清楚地看出来,当数组第一次被定义并且第一次被赋值的时候,这个时候...
    99+
    2024-04-02
  • hashmap底层实现原理
    一、hashmap底层实现原理 HashMap是基于哈希表的Map接口的非同步实现。元素以键值对的形式存放,并且允许null键和null值,因为key值唯一(不能重复),因此,null键只有一个。另外,hashmap不保证元素存储的顺...
    99+
    2023-10-29
    底层 原理 hashmap
  • HashMap的底层实现原理
    这篇文章主要介绍“HashMap的底层实现原理”,在日常操作中,相信很多人在HashMap的底层实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HashMap的底层实现原理”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-04
  • HashMap之keyset()方法底层原理解读
    目录HashMap之keyset() 方法底层原理HashMap (jdk1.8) keySet()方法详细注释keySet()注释KetSet内部类KeyIterator实现Ite...
    99+
    2023-03-22
    HashMap keyset()方法 keyset()方法底层原理 keyset()方法
  • HashMap的底层实现原理是什么
    这篇文章给大家介绍HashMap的底层实现原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.HashMap的常用方法//  Hashmap存值:----------------------...
    99+
    2023-06-06
  • java中hashmap的底层数据结构与实现原理
    目录Hash结构HashMap实现原理为何HashMap的数组长度一定是2的次幂?重写equals方法需同时重写hashCode方法总结Hash结构 HashMap根据名称可知,其实...
    99+
    2024-04-02
  • java 中的HashMap的底层实现和元素添加流程
    目录HashMap 底层实现HashMap 插入流程为什么要将链表转红黑树?哈希算法实现总结前言: HashMap 是使用频率最高的数据类型之一,同时也是面试必问的问题之一,尤其是它...
    99+
    2024-04-02
  • Java LinkedHashMap 底层实现原理分析
    目录添加元素 删除元素 更新元素查找元素 其他方法 迭代器总结 在实现上,LinkedHashMap很多方法直接继承自HashMap,仅为维护双向链表覆写了部分方法。所以,要看懂 L...
    99+
    2024-04-02
  • Java魔法解密:HashMap底层机制大揭秘
    文章目录 一、 源码深度解析1.1 窥探Java集合框架中的设计思想1.2 逐行解读HashMap的源代码1.2.1 类信息1.2.2 常量属性1.2.3 变量属性1.2.4 节点信息1.2.5 构造方法1.2.6 put方法1....
    99+
    2023-12-22
    java 源代码管理
  • Java中SynchronousQueue的底层实现原理剖析
    目录1. SynchronousQueue用法2. SynchronousQueue应用场景3. SynchronousQueue源码解析3.1 SynchronousQueue类属...
    99+
    2022-11-21
    Java SynchronousQueue实现 Java SynchronousQueue原理 Java SynchronousQueue
  • Java同步关键字synchronize底层实现原理解析
    目录1 字节码层实现1.1 InterpreterRuntime::monitorenter1.1.1 函数参数 JavaThread *thread1.1.2 函数体 2...
    99+
    2024-04-02
  • 怎么理解Java中HashMap底层实现、加载因子、容量值及死循环
    这篇文章主要介绍“怎么理解Java中HashMap底层实现、加载因子、容量值及死循环”,在日常操作中,相信很多人在怎么理解Java中HashMap底层实现、加载因子、容量值及死循环问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-16
  • 【Redis进阶】一文搞懂Redisson的看门狗机制底层实现
    文章目录 1. 看门狗机制概述2. 源码解读3. 总结 1. 看门狗机制概述 看门狗机制是Redission提供的一种自动延期机制,这个机制使得Redission提供的分布式锁是可以自动续...
    99+
    2023-09-01
    redis java 数据库
  • C++入门之vector的底层实现详解
    目录前言定义初始结构声明构造函数容量有关操作获取有效数据大小size()获取数据容量capacity()增加容量reserve()重置大小resize()迭代器数据操作尾插push_...
    99+
    2024-04-02
  • C语言数据结构之vector底层实现机制解析
    目录一、vector底层实现机制刨析二、vector的核心框架接口的模拟实现1.vector的迭代器实现2.reserve()扩容3.尾插尾删(push_back(),pop_bac...
    99+
    2024-04-02
  • C++ vector的底层实现分析
    这篇文章主要介绍“C++ vector的底层实现分析”,在日常操作中,相信很多人在C++ vector的底层实现分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++ vector的底层实现分析”的疑惑有所...
    99+
    2023-06-25
  • Docker 进阶之镜像分层方案详解
    目录导读入门图解创建测试镜像查看镜像使用docker inspect使用docker history镜像分层图镜像分层的好处Docker镜像加载原理rootfsUnion ...
    99+
    2024-04-02
  • Java基础之面向对象机制底层实现的示例分析
    这篇文章主要介绍Java基础之面向对象机制底层实现的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允...
    99+
    2023-06-14
  • java底层AQS实现类ReentrantLock锁的构成及源码解析
    目录引导语1、类注释2、类结构3、构造器 4、Sync 同步器4.1、nonfairTryAcquire 4.2、tryRelease5、FairSync 公平锁...
    99+
    2024-04-02
  • java底层组合AQS实现类kReentrantLock源码分析
    这篇“java底层组合AQS实现类kReentrantLock源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作