关注
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
相关推荐
牛客热帖
更多
正在热议
更多
# 牛客吐槽大会 #
14104次浏览 206人参与
# 实习,不懂就问 #
158899次浏览 1402人参与
# 程序员能干到多少岁? #
639次浏览 18人参与
# 国企秋招,你投了吗? #
58729次浏览 376人参与
# 论秋招对个人心气的改变 #
532次浏览 14人参与
# 硬件/芯片公司工作体验 #
146798次浏览 960人参与
# 软开人,秋招你打算投哪些公司呢 #
178190次浏览 1352人参与
# 毕业后不工作的日子里我在做什么 #
232861次浏览 1691人参与
# 帆软软件工作体验 #
11292次浏览 55人参与
# 运营人求职交流聚集地 #
208560次浏览 1091人参与
# 硬件人秋招进展 #
269376次浏览 3983人参与
# 你觉得实习能学到东西吗 #
134835次浏览 1453人参与
# 第一份工作应该只看薪资吗 #
233874次浏览 1855人参与
# 电信求职进展汇总 #
39755次浏览 197人参与
# 关于春招你都做了哪些准备? #
125836次浏览 717人参与
# 快手工作体验 #
301784次浏览 2904人参与
# AI求职实录 #
19456次浏览 441人参与
# 今年春招是金一银二嘛? #
33178次浏览 312人参与
# 没关系,至少我的__很曼妙 #
14404次浏览 244人参与
# 实习打杂,要跑路吗 #
58314次浏览 340人参与
查看10道真题和解析