HashMap 源码解析 底层原理 面试如何回答

HashMap 源码解析 底层原理 面试如何回答

一、参考资料

【Java视频教程,java入门神器(附300道Java面试题剖析)】 https://www.bilibili.com/video/BV1PY411e7J6/?p=172\&share_source=copy_web\&vd_source=855891859b2dc554eace9de3f28b4528

二、笔记总结

2.1、创建工程





2.2、HashMap 构造方法源码


2.3、HashMap put 方法源码

















2.4、面试如何回答

  • JDK 1.8 中 HashMap 中保存的是 Node 对象,key 和 value 都是 Node 对象的属性。
  • JDK 1.8 中 HashMap 底层数据结构是,数组+链表+红黑树。
    • 当数组某个索引位置上的元素个数达到 8 时并且数组长度达到 64 时,这个索引位置的存储结构由链表转为红黑树,可以提高查询、修改、删除操作的效率。
    • 当使用红黑树的索引位置上的元素数量低于 6 时,存储结构退化为链表结构,因为红黑树占用的空间大。
  • HashMap 在使用 put 方法添加元素时
    • 会根据要添加元素的 key 的 hashCode 方法计算 hash 值,然后根据 hash 值计算出元素在数组中的存储位置。
    • 当数组存储位置上已经存在元素时,如果两个元素的 key 计算出的 hash 值不相同,则说明是两个不同的元素,旧的元素的 next 属性会指向新的元素,形成链表结构,HashMap 中的元素都是 Node 对象,Node 对象有 next 属性,用于记录下一个元素的位置。
    • 如果两个元素的 key 计算出的 hash 值相同,equals 方法比较返回 true,说明是两个相同的 key,则把旧元素的 value 值替换为新元素的 value 值,put 方法会返回被替换的旧 value 值
    • 如果数组存储位置上没有元素,则直接添加元素到数组存储位置上,put 方法返回 null
  • HashMap 默认的数组大小是 16,计算因子默认是 0.75,16 * 0.75 = 12,当数组的长度达到临界值 12 时,会触发数组的扩容机制。
相关推荐
都叫我大帅哥2 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.2 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
心念枕惊4 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
feng尘4 小时前
深度解析布隆过滤器(Bloom Filter):原理、优缺点与 1000 万黑名单实战
后端·面试
景同学5 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
触底反弹5 小时前
🔥 从 MySQL 到 Milvus:用 AI 日记本项目搞懂向量数据库和 RAG
javascript·人工智能·面试
网络安全零基础教程5 小时前
网络安全春招面试避坑与复盘指南
linux·网络·安全·web安全·面试·职场和发展
众人皆醒我独醉6 小时前
AI 怎么"理解"一个词的意思?—— Embedding 是把整个世界压缩成一组数字
人工智能·面试
C++、Java和Python的菜鸟6 小时前
第7章 后端Web实战(Tlias系统)
java