⭐️前面的话⭐️
本篇文章将介绍Java中HashMap的底层实现原理,有关HashMap为数组开辟内存的时期,默认的容量,默认负载因子,树化的条件,HashMap的扩容机制,put方法的过程以及HashMap中的哈希函数。
小贴士:博主推荐->学习面试刷题必用工具
📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2022年8月14日🌴
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《数据结构》,📚《算法导论》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📌导航小助手📌
注意事项:博主安利一款刷题面试的神器,如果有小伙伴还没有注册牛客,可以点击下方链接进行注册,注册完就能立即刷题了。不仅是刷题,上面还有很多有关就业的面经,面试题库,以及名企的模拟面试,我非常推荐它,博主自己用的也很多,也刷了不少题了!下图可以作证:
注册地址:牛客网
有关任何问题都可以与博主交流,你可以在评论区留言,也可以私信我,更可以加上博主的vx与博主一对一交流(文章最下方有)。
1.HashMap以及HashMap的基本原理
1.1什么是HashMap?
HashMap是Java集合框架中Map容器的一个实现类,它的底层是使用哈希表实现的,更加具体地说在jdk7中采用数组+链表实现,在jdk8中采用数组+链表+红黑树实现。
Map代表具有映射关系(key-value)的集合,其所有的key是一个Set集合(key值不能重复),即key无序且不能重复,而HashMap就是Map接口下的一个实现类,HashMap是一个储存键值对(EntrySet)的集合,并且支持储存key/value为null
的元素。
下面我们基于jdk8来说一说HashMap的基本原理。
1.2HashMap的属性
HashMap对象被构造时,初始的默认容量为1<<4
,也就是16
,并且必须是2的幂(这与哈希函数有关)。
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
HashMap最大的容量为1<<30
,也就是 2 30 2^{30} 230。
static final int MAXIMUM_CAPACITY = 1 << 30;
HashMap默认的负载因子为0.75
。
static