关注
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
相关推荐
点赞 评论 收藏
分享
10-31 10:39
哈尔滨工业大学(威海) Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 为了去实习,我赌上了___ #
11712次浏览 126人参与
# 晒一晒你收到的礼盒 #
86933次浏览 421人参与
# 十二月请对我好一点 #
16733次浏览 245人参与
# 2025年终总结 #
4301次浏览 88人参与
# uu们,春招你还来吗? #
4641次浏览 39人参与
# 父母对你找工作是助力还是阻力? #
7809次浏览 139人参与
# 一人推荐一个值得做的项目 #
5696次浏览 93人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
6413次浏览 83人参与
# 哪一瞬间让你觉得“这班不如不上” #
5739次浏览 92人参与
# 工作前VS工作后,你的心态变化 #
8375次浏览 109人参与
# 工作中出现了XX情况正常吗 #
21591次浏览 180人参与
# 实习打杂,要跑路吗 #
50177次浏览 319人参与
# 公司福利里最没用的一项是啥 #
4312次浏览 77人参与
# 回顾今年你干过的最“勇”的一件事 #
8654次浏览 123人参与
# 非技术er求职现状 #
120237次浏览 753人参与
# 秋招有哪些公司要求提前实习 #
92111次浏览 497人参与
# 一觉醒来,秋招难度下降一万倍…… #
121055次浏览 768人参与
# 找工作时的取与舍 #
109914次浏览 828人参与
# 我的秋招总结 #
257311次浏览 4256人参与
# 第一份工作能做外包吗? #
84178次浏览 564人参与
