欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 谈谈对jdk8以及以后版本的HashMap的理解

谈谈对jdk8以及以后版本的HashMap的理解

2025/4/2 7:01:19 来源:https://blog.csdn.net/weixin_46591962/article/details/146539705  浏览:    关键词:谈谈对jdk8以及以后版本的HashMap的理解

数据结构

HashMap 是由 数组(桶) + 链表 + 红黑树构成的;

put 流程

首先看桶节点的空间有没有开辟,没有则使用扩容开辟出桶空间,默认长度是16,接下来会判断key 是否产生hash冲突,如果没有产生hash冲突,则把此节点作为桶加入到数组中;产生hash冲突,使用链地址法来解决hash冲突的,首先判断数组节点即桶节点是树节点还是链表节点,树节点采用树节点的put方法,链表节点采用链表节点的添加方法,如果是链表的添加方式,则在添加时会判断链表长度,如果大于8,则将链表转化为红黑树

扩容机制 (resize()方法)

临界值(threshold )= 默认容量(DEFAULT_INITIAL_CAPACITY) * 默认扩容因子(DEFAULT_LOAD_FACTOR)
当hashmap中节点的数量达到临界值时,则会扩容至原来容量的2倍;
resize()方法 返回值为 tab 即为数组,是对数组进行2倍扩容。
对于旧数组中的链表节点,HashMap会将链表拆分为两个子链表,分别迁移到新数组的不同位置;
对于旧数组中的树节点,会将红黑树拆分为两个链表,若拆分后的链表长度≤6,退化为普通链表;否则,重新树化为红黑树。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com