hashmap底层原理
1 HashMap的内部数据结构
数组 + 链表/红黑树
2 HashMap允许空键空值么
HashMap最多只允许一个键为Null(多条会覆盖),但允许多个值为Null
3 影响HashMap性能的重要参数
初始容量:创建哈希表(数组)时桶的数量,默认为 16 负载因子:哈希表在其容量自动增加之前可以达到多满的一种尺度,默认为 0.75
4 HashMap的工作原理
HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象
5 HashMap为什么要引入红黑树
引入红黑树数据结构是为了解决链表O(n)的时间复杂度,由于链表不支持索引,要想在链表中找一个元素就需要遍历一遍链表,那显然效率是比较低的。达到一定条件时(链表长度8),链表就会转变红黑树。
6 扩容
数组容量是有限的,如果数据多次插入并到达一定的数量就会进行数组扩容,也就是resize 方法。如果当前存入的数据数量大于 Capacity * LoadFactor 的时候,就会进行数组扩容 resize。就比如当前的 HashMap 的最大容量大小为 100,当你存进第 76 个的时候,判断发现需要进行 resize了,那就进行扩容。
1)Capacity:HashMap 当前最大容量/长度
2)LoadFactor:负载因子,默认值0.75f
扩容 resize 分为两步:
1)扩容:创建一个新的 Entry/Node 空数组,长度是原数组的 2 倍
2)ReHash:遍历原 Entry/Node 数组,把所有的 Entry/Node 节点重新 Hash 到新数组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性