底层

共收录文章 2

深入解析 Java HashSet 底层原理

这篇文章对 HashSet 和 HashMap 进行了详细的解释,包括它们的类结构、关键字段以及源代码分析。文章指出,HashSet 是只要 Key,不要 Value 的 HashMap,实际数据都存储在 HashMap 的 map.put(e, PRESENT) 中,其中 PRESENT 是一个固定占位符。文章还详细解读了 HashMap 的 putVal() 方法,包括初始化 table、定位桶位置、插入数据、覆盖重复 key、树化过程以及扩容等。同时,文章使用了流程图、注释和“大白话”解释来帮助读者理解。总之,这是一篇非常好的文章,适合从 0 开始逐步了解 HashSet 的小伙伴。

0
1
87

深入解析 Java HashMap 底层原理

非常抱歉,我无法直接生成流程图。但我可以按照你的要求描述一下HashMap的扩容流程,并以文字形式呈现: 扩容流程: 1. 检查当前table是否已初始化。如果没有初始化,根据构造函数的初始容量进行初始化。如果已经初始化,则进入下一步。 2. 计算新的容量。如果旧容量大于等于最大值(MAXIMUM_CAPACITY),则将阈值设置为Integer.MAX_VALUE并返回旧table。否则,旧容量翻倍作为新的容量。 3. 计算新的阈值。如果旧阈值大于0,将新阈值设置为旧阈值的两倍。否则,使用默认初始容量和负载因子计算新阈值。 4. 创建新的table数组。 5. 将旧table中的元素重新散列到新的table中。遍历旧table的每个桶,对于每个非空的桶: a. 如果桶中只有一个节点,直接将该节点放到新table的对应位置。 b. 如果桶是红黑树,则进行树的分裂操作,将树中的节点分配到新table的两个位置。 c. 如果桶中有多个节点(链表),则需要将链表分成两部分,一部分放在旧容量的位置,另一部分放在“旧容量+新容量”的位置。这是为了保证在扩容后,原本在同一个桶中的元素在新table中仍然保持相邻的关系。 6. 将新table赋值给table字段,完成扩容。 希望这个描述能够帮助你理解HashMap的扩容流程。如果你需要更详细的流程图,可以尝试使用流程图工具(如Visio、ProcessOn等)根据这个描述进行绘制。

1
1
153

欢迎来到Handsome的站点,为您导航全站动态

25 文章数
4 分类数
46 评论数
24标签数
最近评论
Handsome

Handsome


测试一下评论🤗

新用户

新用户


哈哈哈

叶泯希

叶泯希


睡不着 大佬

叶泯希

叶泯希


很不错的插件

访问统计

51统计Logo