关注
hashmap的实现原理可以分成两个版本,比如 1.7 怎么怎么样,1.8 怎么怎么样,这么说:hashmap 在 jdk1.8 以前底层数据结构采用数组+链表的方式,之后需要介绍插入的逻辑:在插入元素时,首先会计算key 的 hashcode 并且通过 hashcode&n-1 来计算出 key 在数组中的位置,如果当前数组位置为空,则直接进行赋值,如果当前位置有数据存储了,那就看当前的 key 与我要传入的 key 是否相同,如果相同则进行值覆盖,如果不相同,则表示当前出现了哈希冲突,那么就看当前节点是否有链表,如果有链表则遍历链表查看是否有相同的 key,如果有则进行值覆盖,如果没有就采用头插法的方式将数据写入到链表中。而在 jdk1.8 之后,hashmap 低层数据结构变成了数组+链表+红黑树的方式,在链表个数超过 8 个时就会发生树化。然后介绍一下 1.8 与 1.7 的区别,1.8采用尾插法解决多线程并发 put 时可能导致的环状结构,1.8 的扩容机制是先插入后进行判断数组是否需要进行扩容。这个问题说完了。面试官看你这么吊可能会继续深入问你:为什么 hashmap 的容量必须为 2 的 n 次方?为什么 hashmap 是非线程安全的?为什么 hashmap链表转红黑树的个数为 8 个不为其他个数?怎么解决 hashmap 的线程安全问题?
查看原帖
5 1
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你觉得实习能学到东西吗 #
31403次浏览 639人参与
# 机械人集合!你是什么工程师? #
15418次浏览 89人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
26187次浏览 212人参与
# 秋招什么时候开投比较合适? #
19423次浏览 276人参与
# 发工资后,你做的第一件事是什么 #
67630次浏览 229人参与
# 如何准备秋招 #
18371次浏览 351人参与
# 百度工作体验 #
219728次浏览 1959人参与
# 机械人与华为的爱恨情仇 #
116298次浏览 942人参与
# 工作中哪个瞬间让你想离职 #
25511次浏览 177人参与
# 硬件应届生薪资是否普遍偏低? #
73667次浏览 514人参与
# 不考虑转正,实习多久合适 #
31666次浏览 145人参与
# 影石Insta360求职进展汇总 #
123197次浏览 1069人参与
# 通信和硬件还有转码的必要吗 #
57318次浏览 526人参与
# 24届的你们都什么时候入职? #
60008次浏览 424人参与
# 面试被问期望薪资时该如何回答 #
256055次浏览 1479人参与
# 实习,不懂就问 #
42455次浏览 648人参与
# 你们公司几号发工资 #
20575次浏览 139人参与
# 软开人,秋招你打算投哪些公司呢 #
102511次浏览 958人参与
# 每个月的工资都是怎么分配的? #
25492次浏览 411人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
29046次浏览 460人参与
# 你觉得现在还能进互联网吗? #
7643次浏览 130人参与