面试简要介绍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 覆盖。

相关推荐
swipe1 小时前
深入理解 JavaScript 中的 this 绑定机制:从原理到实战
前端·javascript·面试
豆苗学前端2 小时前
彻底讲透浏览器渲染原理,吊打面试官
前端·javascript·面试
Hilaku4 小时前
在 HTTP/3 普及的 2026 年,那些基于 Webpack 的性能优化经验,有一半该扔了
前端·javascript·面试
掘金安东尼4 小时前
活动落地页效率翻倍:RollCode 这次更新有点猛
前端·低代码·面试
前端Hardy6 小时前
Bun 1.0 正式发布:JavaScript 运行时的新王者?启动快 5 倍,打包小 90%!
前端·javascript·面试
前端Hardy7 小时前
别再乱写正则了!一行 regex 可能让你的网站瘫痪 10 分钟
前端·javascript·面试
前端Hardy7 小时前
Tauri 1.0 正式发布:用 Rust 写前端,体积比 Electron 小 90%!
面试
我叫黑大帅21 小时前
Go 语言并发编程的 “工具箱”
后端·面试·go
H5开发新纪元1 天前
Nginx 部署 Vue3 项目完整指南
前端·javascript·面试
Lee川1 天前
JavaScript 继承进化史:从原型链的迷雾到完美的寄生组合
前端·javascript·面试