面试简要介绍hashMap

jdk8之前,hashmap采用的数据结构是数组+链表,jdk8之后采用的数据结构是数组+链表/红黑树。hashmap的数据以键值对的形式存在,如果两个元素的hash值相同,就会发生hash冲突,被放到同一个链表上--->如何解决hash冲突--->再hash法,即当发生hash冲突时,使用另一个哈希函数对键进行再次哈希,以确定下一个位置。在jdk8之后,链表超过8会转化为红黑树,如果当前数据/数据总容量 > 负载因子,hashmap就会进行扩容,初始化容量默认是16,默认加载因子是0.75,该数据是通过泊松分布数学计算得出的。

回答思路:

hashmap的数据结构-->红黑树-->扩容,负载因子

hashmap的数据形式-->键值对-->hash冲突-->解决方案

补充:hashmap为什么不安全

在 JDK1.7 中,HashMap 采用头插法,因此并发情况下会导致环形链表,产生死循环。

虽然 JDK1.8 采用了尾插法解决了这个问题,但是并发下的 put 操作也会使前一个 key 被后一个 key 覆盖。

相关推荐
small_wh1te_coder2 小时前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
uhakadotcom3 小时前
使用postgresql时有哪些简单有用的最佳实践
后端·面试·github
墨染点香3 小时前
LeetCode 刷题【42. 接雨水】
算法·leetcode·职场和发展
汪子熙4 小时前
Git 是如何检测本地 commit 中包含敏感信息的?背后的技术原理解析
javascript·后端·面试
言兴5 小时前
面试题深度解析:父子组件通信与生命周期执行顺序
前端·javascript·面试
今禾5 小时前
Git 日常使用与面试考点详解:从入门到精通
前端·git·面试
uhakadotcom5 小时前
fastapi的BackgroundTasks有哪些典型常用的用法?
后端·面试·github
xnglan6 小时前
蓝桥杯手算题和杂题简易做法
数据结构·数据库·c++·python·算法·职场和发展·蓝桥杯
前端小巷子6 小时前
Vue SSR原理
前端·vue.js·面试
天才测试猿7 小时前
接口自动化测试难点:数据库验证解决方案
自动化测试·软件测试·数据库·python·测试工具·职场和发展·接口测试