HashMap-源码分析

一个菜鸟的源码之路

测试代码

和之前分析的一样,我们来从初始化,加值,扩容这三个步骤来说。

1.new初始化



在这里初始化了一个值,叫负载因子,具体的作用后面再说。

2.put加值

put函数就会直接调用putVal()


再来看下hash()的实现,发现这个函数就是用来求传入值的hashcode值的异或运算结果。具体作用主要是,来将一个一个对象进行区域划分,减少查找难度

然后,来分析下putVal()函数。这部分比较长,我们一步一步来分析。

首先会到resize()函数,我们来看下resize()函数。发现会返回一个16长度的Node数组

再来看putVal()函数。然后就会将保存了key,value的Node节点赋给tab[i]。

3.扩容

之前说到,最初是初始化一个长度为16的数组,当长度超过时,会咋样呢。这时,我们就要回过头来看resize()函数


此时,我们知道了负载因子的作用。每当存储的键值对的长度大于负载因子和默认大小的乘积时,会自动扩容为原来的一倍

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • HashMap 是 Java 面试必考的知识点,面试官从这个小知识点就可以了解我们对 Java 基础的掌握程度。网...
    野狗子嗷嗷嗷阅读 11,681评论 9 107
  • 一、HashMap概述 HashMap基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用nul...
    小陈阿飞阅读 3,795评论 0 2
  • HashMap HashMap概述 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,...
    史路比阅读 2,224评论 0 6
  • 一、前言 上篇简单分析了下HashTable,本篇就分析HashMap的源码,对于HashMap源码中涉及到的一些...
    隔壁老王的隔壁啊阅读 1,553评论 0 0
  • 不必艳羡他人如何厉害,你要做的就是想如何能从他人身上挖到宝藏,挖到你可以学习利用的点,同时借助他人的理解分享来加深...
    离井的蛙阅读 2,361评论 1 4

友情链接更多精彩内容