关注
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
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届的你们有几段实习? #
19563次浏览 273人参与
# 你小时候最想从事什么职业 #
102706次浏览 1771人参与
# 你被哪些公司秒挂过? #
18608次浏览 182人参与
# 网申一定要掌握的小技巧 #
9649次浏览 65人参与
# 如何提高实习转正率? #
7530次浏览 133人参与
# 新凯来求职进展汇总 #
41015次浏览 108人参与
# 你认为哪些项目算烂大街? #
8278次浏览 196人参与
# 机械校招之路总结 #
92413次浏览 1889人参与
# 你后悔自己读研吗? #
8915次浏览 175人参与
# 你以为的实习VS真实的实习 #
11449次浏览 131人参与
# 月薪多少能在一线城市生存 #
10692次浏览 169人参与
# 腾讯工作体验 #
479920次浏览 3498人参与
# 找工作时的取与舍 #
81317次浏览 577人参与
# 最难的技术面是哪家公司? #
5930次浏览 57人参与
# 秋招拿一个offer可以躺平吗 #
144948次浏览 928人参与
# 安利/避雷我的专业 #
77738次浏览 526人参与
# 面试等了一周没回复,还有戏吗 #
137176次浏览 1229人参与
# 你想留在一线还是回老家? #
50029次浏览 513人参与
# 选择和努力,哪个更重要? #
86057次浏览 745人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
114933次浏览 799人参与