HashMap原理+红黑树

一、HashMap原理

HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体。
在JDK1.8中,链表长度大于8的时候,链表会转成红黑树!

二、HashMap在JDK1.8之前和之后的区别

在JDK1.8之前 结构是数组+链表,缺点就是哈希函数很难使元素百分百的均匀分布,这会产生一种极端的可能,就是大量的元素存在一个桶里

在jdk1.8之后,HashMap采用数组加链表或是红黑树的形式

1、在HashMap添加元素时,按照数组+链表形式添加,当桶中的数量大于8时,链表会转换成红黑树的形式。

2、删除元素、扩容时,同上,数量大于8时,也是采用红黑树形式存贮,但是在数量较少时,即数量小于6时,会将红黑树转换回链表。

3、遍历、查找时,使用红黑树,他的时间复杂度O(log n),便于性能的提高。

三、红黑树的作用

Java 中的 HashMap 采用链表法来解决哈希冲突HashMap 原理,即具有相同桶下标的键值对使用一个链表储存。当链表变长时,查找和添加(需要确定 key 是否已经存在)都需要遍历这个链表,速度会变慢。JDK 1.8 后加入了链表转换为红黑树的机制,但是红黑树的转换并不是一个廉价的操作,只有当链表长度大于等于 TREEIFY_THRESHOLD 才会 treeify。

实际上并不是只要链表长度大于 8 就会 treeify。当 table.length(桶的个数)小于 MIN_TREEIFY_CAPACITY 时会优先扩容而不是转换为红黑树。

四、扩容机制

HashMap是基于数组+链表和红黑树实现的,但用于存放key值得的数组桶的长度是固定的,由初始化决定。

那么,随着数据的插入数量增加以及负载因子的作用下,就需要扩容来存放更多的数据。而扩容中有一个非常重要的点,就是jdk1.8中的优化操作,可以不需要再重新计算每一个元素的哈希值。

【HashMap原理+红黑树】相关推荐

  1. HashMap底层红黑树原理(超详细图解)+手写红黑树代码

    在看完了小刘老师和黑马的源码视频之后,我整理了一篇HashMap的底层源码文章,学海无涯,这几天看了对红黑树的讲解,故将其整理出来 HashMap底层源码解析上 HashMap底层源码解析下 视频链接 ...

  2. Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析

    1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...

  3. hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构

    1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...

  4. 面试系列Java中级:为什么HashMap引入红黑树?

    因为在JDK1.7之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个数组中的元素较多,即hash值相等的元素较多时,通过key值依次查找 ...

  5. hashmap中用红黑树不用其他树_HashMap面试专题:常问六题深入解析

    引言 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看,专攻HashMap即可. 然而,鉴于网 ...

  6. 高端的面试从来不会在HashMap的红黑树上纠缠太多

    前言 在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是"基础扎实"还是"基础薄弱",如果候选人能够举一反三主动阐述自己 ...

  7. HashMap与红黑树

    一.为什么需要HashMap? 在我们写程序的时候经常会遇到数据检索等操作,对于几百个数据的小程序而言,数据的存储方式或是检索策略没有太大影响,但对于大数据,效率就会差很远. 1.线性检索: 线性检索 ...

  8. 关于hash,hashCode, hashMap,红黑树

    小刘老师讲HashMap源码 小刘老师讲红黑树 hash,hashCode,hashMap 1.前提知识 数组: 列表: 散列表 什么是hash? hash也称散列,哈希,基本原理就是把任意长度的输入 ...

  9. HashMap底层红黑树实现(自己实现一个简单的红黑树)

    文章整理于小刘老师讲源码 视频学习链接:小刘老师讲解红黑树 JDK集合源码之HashMap解析(上) JDK集合源码之HashMap解析(下) 1.树结构入门 1.1 什么是树? 树(tree)是一种 ...

最新文章

  1. 读硕/博期间你积累了哪些重要的科研经验?
  2. 页面生成周期中的两个Application池的详情小弟了解
  3. 苹果欲借免费纳米SIM卡技术控制行业标准
  4. wgs-84,gcj-02,bd-09的相互转换,高德,世界测量,百度坐标系的相互转换,坐标系转换
  5. 【Proteus仿真8086实验一】RAM存储器62256
  6. python 字符串以及通过dos命令运行py脚本
  7. 微机原理及应用实验——汇编环境MASM的使用
  8. excel mysql仓库管理_怎样用excel数据库建立仓库管理系统?
  9. H3CSE认证网络工程师视频课程-交换技术-宋文峰-专题视频课程
  10. IPD流程框架及实施关键点
  11. git 内网搭建_Gitlab搭建内网服务器
  12. 修复ipad提示无法连接到服务器,修复无法连接到iPad的App Store
  13. 10 craps赌博游戏
  14. 视频转换器如何将腾讯QLV格式转换成MP4视频文件 1
  15. 马云有自己的银行,为什么还要贷款?
  16. 网易互联网 Unity 面经
  17. SDUCS经验分享未完结部分
  18. 阿里巴巴计算机招聘学历要求,阿里巴巴招程序员,到底看不看学历?
  19. 大话2口袋版不显示服务器,大话西游2新口袋版操作指引及常见问题说明
  20. scala-尾递归,Array.newbuilder,二维数组

热门文章

  1. 电子邮件的编码--base64
  2. 13班大三上学科资料汇总(持续更新~)
  3. 直播预告|一键观看关联网络与团伙欺诈的爱恨情仇
  4. 18000 字的 SQL 优化大全,收藏直接起飞!
  5. 我的2018前端踩坑记 | 掘金年度征文
  6. TPlink WR880N V3 TP9343 Openwrt 改造记录
  7. Solidworks显示和隐藏工具栏
  8. Python+ you-get 批量下载麻辣烫视频
  9. CAD如何阵列复制,复制快捷键是什么?
  10. 结合协同过滤和个性化AGENT的增强推荐