hashmap简要介绍

qq_35320071 qq_35320071 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
jdk版本是1.8,其他版本可能会有不一致。由于是手机端,所以不贴源码,建议参照源码学习。hashmap由数组+链表+红黑树组成。分为put,get,扩容机制三部分大致介绍: 一丶put 1.调用hash(key)计算出hash值,将所有参数传入putVal(参数省略)。 2.初始化判断。第一次table[]数组为空,也对table[]进行初始化。将容量设置为16或自定义长度。 3.根据hash值找到数组下标, 1) 若没有值,直接将Node初始化存入; 2) 若有值,判断该节点是红黑树节点还是链表节点,并将其存入。若是链表节点,是否有一样的key,有则覆盖,没有则插入链表最后,当链表长度等于8时,转为红黑树。 二丶扩容机制 扩容机制和初始化调用的都是resiz()函数,初始为16,每次扩容翻倍,并进行数据迁移。扩容机制有两个: 1.当数组长度大于阀值,即容量*0.75时,扩容; 2.当数组长度小于64,且链表长度大于8; (判断过程略) 三丶get 1.计算key的hash值,找到对应下标; 2.判断第一个节点是否是我们找的值,若不是,判断是红黑树节点还是链表,调用方法或遍历链表。 以上只是简要介绍,详细的请看源码解析。
...全文
评论
收藏 已收藏
分享
返回顶部
qq_35320071
Java SE 62,620 成员 307,251 内容