HashMap源码浅分析与解读

举报
三三是该溜子 发表于 2025/05/05 10:29:59 2025/05/05
【摘要】 ​阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!目录HashMap中一些成员变量的认识:HashMap中的构造方法阿华代码解读,不是逆风就是你疯HashMap 和TreeMap都继承于Map,Map是一个接口在实现这个接口的时候,需要实例化TreeMap或者HashMap。HashMap中一些成员变量的认识:默认哈希桶的大小为16(左移运算,左移4位...


阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!

目录

HashMap中一些成员变量的认识:

HashMap中的构造方法

阿华代码解读,不是逆风就是你疯

HashMap 和TreeMap都继承于Map,Map是一个接口在实现这个接口的时候,需要实例化TreeMap或者HashMap。

HashMap中一些成员变量的认识:

默认哈希桶的大小为16(左移运算,左移4位)

默认负载因子

链表长度

数组长度

这两者当链表长度超过8,数组长度超过64的时候,进行树化

解树化:就是链表删除节点删呀删呀删,删到只剩6个节点的时候,就把它当做链表,不要当成红黑树

Node节点实现Map.Entry接口,每一个节点就是一个Entry

HashMap中的构造方法
HashMap有四个构造方法,这里举例带两个参数的构造方法,initialCapacity是指定容量,loadFactor是指定负载因子,如果initialCapacity<0,抛出异常

用带有一个参数的构造方法,会调用带有两个参数的构造(红线处this,给默认的DEFAULT_LOAD_FACTOR)

调用无参的构造方法时,会发现只初始化了默认容量,loadFactor,数组大小并没有分配,实际在第一次put的时候会分配一个大小长度为16的数组

put方法

put方法里面       先进hash方法        再进putVal方法

hash方法

putVal方法
补充:异或完得到更为均匀的数字

进resize
(复杂,一定记得我们给的初始条件都是基于调用不带参数的构造方法)

不进resize方法
,继续往下走,如果插入的位置为null,那么直接插入,若为null那就用尾插法(else语句)

tableSizeFor
确定n的大小,在tableSizeFor中实现

不进resize继续走

treeifyBin

此文章只浅解读了HashMap中的put过程,后续还有补充再进行修改,如有错误,还请多多指教

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。