关注
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
相关推荐
点赞 评论 收藏
分享
查看6道真题和解析
点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
327341次浏览 3073人参与
# 上班苦还是上学苦呢? #
72151次浏览 643人参与
# 百度开奖 #
182940次浏览 1141人参与
# 地方国企笔面经互助 #
4493次浏览 12人参与
# 如果有时光机,你最想去到哪个年纪? #
21560次浏览 395人参与
# 选完offer后,你后悔学本专业吗 #
21829次浏览 159人参与
# 阿里云管培生offer #
36898次浏览 422人参与
# 我的实习求职记录 #
6069840次浏览 83541人参与
# 如何一边实习一边秋招 #
996559次浏览 12662人参与
# 找工作时遇到的神仙HR #
553259次浏览 3801人参与
# 入职第一天,你准备什么时候下班 #
21601次浏览 144人参与
# 招聘要求与实际实习内容不符怎么办 #
10761次浏览 277人参与
# bilibili求职进展汇总 #
33158次浏览 356人参与
# 许愿池 #
214736次浏览 2534人参与
# 学历or实习经历,哪个更重要 #
53823次浏览 422人参与
# 你今年的平均薪资是多少? #
70652次浏览 344人参与
# 实习工作,你找得还顺利吗? #
247702次浏览 2906人参与
# 通信硬件薪资爆料 #
608667次浏览 5166人参与
# 海康威视求职进展汇总 #
400690次浏览 3408人参与
# 携程求职进展汇总 #
135671次浏览 930人参与
# 正在实习的你,几点下班 #
53282次浏览 396人参与
# 工作两年想退休了 #
53076次浏览 672人参与