hashmap底层原理
Posted trling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hashmap底层原理相关的知识,希望对你有一定的参考价值。
从大的方向上来说,hashmap底层其实是采用数组+链表+红黑树的形式。
在数据插入过程中,随着数据量的增大,hashmap里通过数组扩容,链表转红黑树形式来存储数据的。
那么,数组扩容是什么时候进行扩容的呢?
其实,数组扩容是根据数组阈值来判定是否扩容,hashmap设定初始数组的个数默认是16个,而阈值则通过初始数组个数X默认加载因子0.75,
超过该阈值时,则链表(单链表)则转化为红黑树。
hashmap的put过程:
在put的时候,是先根据存入hashmap的key计算出其hash值的,如果该hash值在数组中是不存在的,直接在红黑树中创建新node(超过阈值的情况,否则还是以
数组或者链表方式存储),如果hashmap是存在于链表上而不是在红黑树上(此时链表还未形成红黑树),就按照链表方式进行插入操作,如果该hashmap是已经存 在于红黑树的node节点上,就按照红黑树的插入方式进行插入。
hashmap的get过程:
在get的时候,也是先给句get的key值计算出hashmap值,如果该key在数组中(还未达到阈值扩容),则直接根据数组的位置找出值。如果key的hash值存在于链表 上(该hashmap链表还未形成红黑树),则根据链表方式获取值。如果key的hash值存在于红黑树上(数组已扩容,链表已转化为红黑树),则根据红黑树的查询方式 进行查询。
以上是关于hashmap底层原理的主要内容,如果未能解决你的问题,请参考以下文章
HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用
HashMap的底层实现原理? HashMap 和 Hashtable的异同? 负载因子值的大小,对HashMap有什么影响?