码迷,mamicode.com
首页 > 其他好文 > 详细

hashmap底层原理

时间:2018-06-16 13:39:17      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:数据量   nbsp   nod   获取   存储   查询   hashmap   strong   加载因子   

从大的方向上来说,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底层原理

标签:数据量   nbsp   nod   获取   存储   查询   hashmap   strong   加载因子   

原文地址:https://www.cnblogs.com/trling/p/9190133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!