HashMap

  • JDK1.8的HashMap:底层实现(数组+链表/红黑树)
  • 1、为什么要从JDK1.8之前的链表设计,修改为链表或红黑树的设计?
  • 当某个链表比较长的时候,查找效率还是会降低。
  • 为了提高查询效率,那么把table[index]下面的链表做调整。
  • 如果table[index]的链表的节点的个数比较少,(8个或以内),就保持链表。如果超过8个,那么就要考虑把链表转为一棵红黑树。
  • TREEIFY_THRESHOLD:树化阈值,从链表转为红黑树的临界值。
  • 2、什么时候树化?
  • table[index]下的结点数一达到8个就树化吗?
  • 如果table[index]的节点数量已经达到8个了,还要判断table.length是否达到64,如果没有达到64,先扩容。
  • 演示:8个->9个 length从16-》32
  • 9个->10个  length从32->64
    
  • 10个->11个 length已经达到64,table[index]就从Node类型转为TreeNode类型,说明树化
    
  • MIN_TREEIFY_CAPACITY:最小树化容量64
  • 3、什么时候从树–>链表
  • 当你删除结点时,这棵树的结点个数少于6个,会反树化,变为链表
  • UNTREEIFY_THRESHOLD:6个
  • 树的结构太复杂,当结点少了之后,就用链表更好。
  • 4、put的过程
  • (1)[index]的计算问题
  • 第一步用key的hashCode值调用hash()函数,干扰hash值,使得(key,value)更加均匀的分布table数组中。
  • JDK1.8中hash()算法更优化。
  • 第二步: hash值与table.length-1做&运算,保证index在[0,length-1]范围内
  • (2)扩容问题
  • 第一种:当某个table[index]的链表的个数达到8个,并且table.length<64,那么会扩容
  • 第二种:size >= threshold,并且table[index]!=null
  • threshold = table.length * loadFator(它的默认值DEFAULT_LOAD_FACTOR:0.75)
  • (3)当把(key,value)添加到链表中,JDK1.8是在链表的尾部

hashMap源码分析1.8相关推荐

  1. Java类集框架 —— HashMap源码分析

    HashMap是基于Map的键值对映射表,底层是通过数组.链表.红黑树(JDK1.8加入)来实现的. HashMap结构 HashMap中存储元素,是将key和value封装成了一个Node,先以一个 ...

  2. 查询已有链表的hashmap_源码分析系列1:HashMap源码分析(基于JDK1.8)

    1.HashMap的底层实现图示 如上图所示: HashMap底层是由  数组+(链表)=(红黑树) 组成,每个存储在HashMap中的键值对都存放在一个Node节点之中,其中包含了Key-Value ...

  3. 源码分析系列1:HashMap源码分析(基于JDK1.8)

    1.HashMap的底层实现图示 如上图所示: HashMap底层是由  数组+(链表)+(红黑树) 组成,每个存储在HashMap中的键值对都存放在一个Node节点之中,其中包含了Key-Value ...

  4. HashMap源码分析(转载)

    一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap  ...

  5. Map接口总结与HashMap源码分析

    Map接口 1.Map,用于保存K-V(双列元素) 2.Map中的Key Value可以是任意引用分类型的数据,会封装到HashMap的Node对象中 3.Map的key不允许重复.原因和HashSe ...

  6. 在参考了众多博客之后,我写出了多达三万字的HashMap源码分析,比我本科毕业论文都要精彩

    HashMap源码分析 以下代码都是基于java8的版本 HashMap简介 源码: public class HashMap<K,V> extends AbstractMap<K, ...

  7. hashmap源码分析及常用方法测试_一点课堂(多岸学院)

    HashMap 简介 底层数据结构分析 JDK1.8之前 JDK1.8之后 HashMap源码分析 构造方法 put方法 get方法 resize方法 HashMap常用方法测试 感谢 changfu ...

  8. HashMap 源码分析与常见面试题

    文章目录 HashMap 源码分析 jdk 1.7 内部常量 静态内部类 Holder 类 构造方法 put 过程 put 整体流程图 jdk 1.8 增加的常量 Node 类 Hash 值计算的变化 ...

  9. HashMap源码分析

    文章目录 简介 继承关系 存储结构 源码分析 属性 Node节点 TreeNode HashMap 构造方法 put 添加方法 待更新 简介 在我们使用数据存储的时候都会有数据结构这种东西,但是传统的 ...

  10. JDK7中HashMap源码分析

    文章目录 JDK7中的HashMap 一.JDK7中HashMap源码中重要的参数 二.JDK7中HashMap的构造方法 三.JDK7中创建一个HashMap的步骤 四.JDK7中HashMap的p ...

最新文章

  1. mysql mrr_cost_based_mysql mrr介绍
  2. Yii的scenarios
  3. swift学习笔记-----swift中的指针
  4. python实现Redis订阅发布
  5. problem b: 一年中的第几天_第九届蓝桥杯B组试题
  6. Docker由浅入深
  7. 自动化测试工具selenium python_WEB自动化测试工具selenium录制器
  8. SSOR-PCG FORTRAN版CSR压缩存储
  9. ios控制中心android版,IOS控制中心
  10. 人力资源SaaS“一哥”,二十年艰难进化
  11. android 打开pdf文件
  12. 阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices
  13. 使用Mybatis进行更新操作成功,数据库却没更新的原因
  14. 解码方法( dfs | dp )
  15. 深入理解Java虚拟机(周志明第三版)- 第十一章:后端编译与优化
  16. c 语言字符串查找替换,c ++ - 如何在标准字符串中搜索/查找和替换?
  17. mysql gis_MySQL的GIS、GEO入门笔记
  18. 图解机器学习算法(6) | 决策树模型详解(机器学习通关指南·完结)
  19. 【数据结构与算法】-6.1图的基本概念和术语
  20. iqooneo3 如何不用vivo账号下载外部应用_iQOO Neo3评测:救市或转型?总之香就对了...

热门文章

  1. Windows使用ROS机器人操作系统全面资料汇总
  2. DotNetty z
  3. 大模型入门(四)—— 基于peft 微调 LLaMa模型
  4. cocos2dx的几种常见设计模式
  5. UWP WP8.1 依赖属性和用户控件 依赖属性简单使用 uwp添加UserControl
  6. Vue 中使用 el-input 自动获取焦点和二次获取焦点问题
  7. Friends 人物简介
  8. Django银角大王武沛齐配套视频笔记,python全栈开发、pythonWeb
  9. Android Camera2 相机预览、获取数据
  10. 产教融合 |贵州轻工职业技术学院一行莅临我司调研交流