
HashMap 源码解析 底层原理 面试如何回答一、参考资料【Java视频教程java入门神器附300道Java面试题剖析】 https://www.bilibili.com/video/BV1PY411e7J6/?p172share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b4528二、笔记总结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 时会触发数组的扩容机制。