最近朋友说研究并发可以先从HashMap源码分析开始,所以就研究了下HashMap的结构和源码。

先从HashMap的结构开始。

我们都知道HashMap的用来存储key,value键值对数据的。既然是存储数据的,我们就得想一下数据存储的数据结构信息有哪些,我们所知道的数据存储结构有 数组,链表,树形,图形。数组查询快,增删慢。链表增删快查询慢,我们可以猜猜HashMap什么结构,可不可能是数组加链表相互结合,取两者的优势的结构。也就是数组+链表的结构。

在jdk1.8之前,hashmap的结构确实是数组加链表的,在jdk1.8的时候hashmap结构又进行了优化。由数组+链表的结构转为了在某特定情况的时候链表会转为红黑树的结构。也就是,在jdk1.8之前链表的长度是没有限制的,当数据增多,链表越长,hashmap的效率就会下降。在jdk1.8的时候,链表的长度限制为8,在超过8时,将链表的结构转成红黑树结构,提高效率,当然红黑树的结构也会有限制,节点数最低不能低于6个,当低于6时,会自动转为链表提高效率,这就是jdk1.8时hashMap很神奇的结构变化。

----------下面是分析时的概要理解-----------

我们都知道数据结构,却很少将结构具象化成代码,如下简单尝试一下。

ArrayList  ---> 数组 ----> Object [ ]

LinkedList --->双向链表 ---->

class Node{Object Data;//数据Node previous;//上一节点信息Node next;//下一节点信息
}

当然这只是我们将结构想象成java代码的样子,这段代码并不一定是对的。

HashMap的结构及源码分析相关推荐

  1. 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )

    文章目录 一.内存区域 zone 简介 二.zone 结构体源码分析 1.watermark 成员 2.lowmem_reserve 成员 3.zone_pgdat 成员 4.pageset 成员 5 ...

  2. HashMap与ConcurrentHashMap万字源码分析

    HashMap与ConcurrentHashMap`源码解析 JDK版本:1.7 & 1.8 ​ 开发中常见的数据结构有三种: 1.数组结构:存储区间连续.内存占用严重.空间复杂度大 优点:因 ...

  3. HashMap实现原理及源码分析为何选用红黑树

    目录 一.什么是哈希表 二.HashMap实现原理 三.为何HashMap的数组长度一定是2的次幂? 四.重写equals方法需同时重写hashCode方法 五.总结 为什么HashMap使用红黑树而 ...

  4. HashMap实现原理及源码分析

    目录 一.什么是哈希表 二.HashMap实现原理 三.为何HashMap的数组长度一定是2的次幂? 四.重写equals方法需同时重写hashCode方法 五.总结 一.什么是哈希表 在讨论哈希表之 ...

  5. 【Java集合学习系列】HashMap实现原理及源码分析

    HashMap特性 hashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap接口,实现了Map接口(HashTable跟HashMap很像,HashTable中的方法是线程安全 ...

  6. redis底层数据结构(redis底层存储结构、源码分析)

    文章目录 前言 一.redis为什么快? 二.redis的底层数据结构 2.1.redis的底层存储的扩容机制 2.1.1.扩容时间 2.1.2.扩容多大 2.1.3.扩容后的rehash 2.1.4 ...

  7. 【阅读源码系列】ConcurrentHashMap源码分析(JDK1.7和1.8)

    个人学习源码的思路: 使用ctrl+单机进入源码,并阅读源码的官方文档–>大致的了解一下此类的特点和功能 使用ALIT+7查看类中所有方法–>大致的看一下此类的属性和方法 找到重要方法并阅 ...

  8. ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),Con ...

  9. concurrenthashmap_ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),Con ...

最新文章

  1. 三种 MySQL 大表优化方案
  2. python语言开发的软件有哪些-最适合人工智能开发的5种编程语言,你知道几种?...
  3. shell实例第16讲:猜拳游戏
  4. Paper之CV:《One Millisecond Face Alignment with an Ensemble of Regression Trees》的翻译与解读
  5. OpenGL顶点阵列对象
  6. C++一天一个程序(一)
  7. C++远征之封装篇——字符串类型
  8. java数字时钟代码,[Java教程]Javascript 数字时钟
  9. webpack4.0各个击破(6)—— Loader篇
  10. 在iphone开发中的get请求和post请求
  11. 显示lib包_Java 添加、删除、移动、隐藏/显示Excel工作表
  12. TShockwaveFlash的安装及其属性和方法
  13. (13.3)Latex参考文献引用及常规引用
  14. 前端实习第一周总结(学习上的收获与生活上的收获)
  15. 布局技巧(等高、圣杯)
  16. python atm银行取款系统_python ATM机 案例代码
  17. @Valid使用详解
  18. 阿里巴巴并购雅虎中国[北京时间8月11日14时]
  19. 小学计算机课知识点,小学信息技术课程课件
  20. 用超级简单的C语言实现人机五子棋(键盘控制)

热门文章

  1. php分解质因数,用PHP如何实现将一个整数分解为质因数的积?
  2. 前端模式 VD, 脏检查 MVVM ,数据收集 MVVM 所使用的场合
  3. Java - 计算不同字符或数字的个数
  4. pyqt5生成py的文件为什么是c 语言,如何使用PyQt5在python中创建文件对话框
  5. python实例 99,100
  6. java线程池执行器_Java线程池ThreadPoolExecutor的使用
  7. 不到30的成本,还不赶紧造起来——盘点软著申请小知识
  8. 机器学习里面常用知识
  9. 对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...
  10. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)