![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java集合
文章平均质量分 95
橡 皮 人
代码传递思想,技术创造回响。
展开
-
HashMap第5讲——resize方法扩容源码分析及细节
put方法的源码和相关的细节已经介绍完了,下面我们进入扩容功能的讲解。一、为什么需要扩容这个也比较好理解。假设现在HashMap里的元素已经很多了,但是链化比较严重,即便树化了,查询效率也是O(logN),肯定没有O(1)好,所以需要扩容来降低Hash冲突的概率,提高性能。二、触发扩容的临界我们知道,当++size>threshold条件成立时,就会调用resize()方法进行扩容。原创 2024-06-27 07:30:00 · 975 阅读 · 0 评论 -
HashMap第4讲——如何保证容量为2^n(源码分析)
在介绍的时候,提到了为了让位运算(&)替代取模运算(%),HashMap的容量只能是2^n,这是如何做到的呢?还有就是HashMap的容量设置为多少合适呢?原创 2024-06-20 07:30:00 · 818 阅读 · 0 评论 -
HashMap第3讲——JDK1.8红黑树细节
上篇文章对HashMap的put方法进行了源码解析,并介绍了其中的两个亮点设计——位运算取代%和扰动计算。其中还有几个细节,比如每次扩容都是2^n是怎么做到的、JDK1.8增加的红黑树结构,由于篇幅原因没有介绍,这节就先来介绍其中的一个细节——红黑树。原创 2024-06-13 07:30:00 · 654 阅读 · 0 评论 -
HashMap第2讲——put方法源码及细节
上篇文章介绍了HashMap在JDK 1.8前后的4大变化,今天就进入到put方法的源码解析。HashMap的设计非常巧妙,细节也很多,今天来看看部分细节,后续的文章会一一介绍。ps:学习源码的目的不仅仅是为了了解它的运行机制,更重要的是学习它的思想和编码技巧,每一行的源码都可能都经过了“千锤百炼”,才得以呈现在大家眼前。原创 2024-06-06 07:30:00 · 706 阅读 · 0 评论 -
HashMap第1讲——JDK 1.8版本前后的变化
今天开始就进入Java集合的学习和总结了,我是这样打算的:集合三巨头——HashMap、ConcurrentHashMap和ArrayList会详细介绍(源码+细节),其它比如HashTable、Vector、HashSet、TreeSet等,会根据面试点介绍,必要时也会介绍部分源码。那么下面我们开始介绍集合第一篇文章吧。ps:HashMap的知识点还是挺多的,所以要分多次介绍,本节就先着重介绍HashMap JDK1.8版本前后的变化。原创 2024-05-30 07:15:00 · 796 阅读 · 0 评论