【HashMap原理+红黑树】
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原理+红黑树】相关推荐
- HashMap底层红黑树原理(超详细图解)+手写红黑树代码
在看完了小刘老师和黑马的源码视频之后,我整理了一篇HashMap的底层源码文章,学海无涯,这几天看了对红黑树的讲解,故将其整理出来 HashMap底层源码解析上 HashMap底层源码解析下 视频链接 ...
- Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析
1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...
- hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构
1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...
- 面试系列Java中级:为什么HashMap引入红黑树?
因为在JDK1.7之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个数组中的元素较多,即hash值相等的元素较多时,通过key值依次查找 ...
- hashmap中用红黑树不用其他树_HashMap面试专题:常问六题深入解析
引言 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看,专攻HashMap即可. 然而,鉴于网 ...
- 高端的面试从来不会在HashMap的红黑树上纠缠太多
前言 在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是"基础扎实"还是"基础薄弱",如果候选人能够举一反三主动阐述自己 ...
- HashMap与红黑树
一.为什么需要HashMap? 在我们写程序的时候经常会遇到数据检索等操作,对于几百个数据的小程序而言,数据的存储方式或是检索策略没有太大影响,但对于大数据,效率就会差很远. 1.线性检索: 线性检索 ...
- 关于hash,hashCode, hashMap,红黑树
小刘老师讲HashMap源码 小刘老师讲红黑树 hash,hashCode,hashMap 1.前提知识 数组: 列表: 散列表 什么是hash? hash也称散列,哈希,基本原理就是把任意长度的输入 ...
- HashMap底层红黑树实现(自己实现一个简单的红黑树)
文章整理于小刘老师讲源码 视频学习链接:小刘老师讲解红黑树 JDK集合源码之HashMap解析(上) JDK集合源码之HashMap解析(下) 1.树结构入门 1.1 什么是树? 树(tree)是一种 ...
最新文章
- 读硕/博期间你积累了哪些重要的科研经验?
- 页面生成周期中的两个Application池的详情小弟了解
- 苹果欲借免费纳米SIM卡技术控制行业标准
- wgs-84,gcj-02,bd-09的相互转换,高德,世界测量,百度坐标系的相互转换,坐标系转换
- 【Proteus仿真8086实验一】RAM存储器62256
- python 字符串以及通过dos命令运行py脚本
- 微机原理及应用实验——汇编环境MASM的使用
- excel mysql仓库管理_怎样用excel数据库建立仓库管理系统?
- H3CSE认证网络工程师视频课程-交换技术-宋文峰-专题视频课程
- IPD流程框架及实施关键点
- git 内网搭建_Gitlab搭建内网服务器
- 修复ipad提示无法连接到服务器,修复无法连接到iPad的App Store
- 10 craps赌博游戏
- 视频转换器如何将腾讯QLV格式转换成MP4视频文件 1
- 马云有自己的银行,为什么还要贷款?
- 网易互联网 Unity 面经
- SDUCS经验分享未完结部分
- 阿里巴巴计算机招聘学历要求,阿里巴巴招程序员,到底看不看学历?
- 大话2口袋版不显示服务器,大话西游2新口袋版操作指引及常见问题说明
- scala-尾递归,Array.newbuilder,二维数组