关注
 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
相关推荐
牛客热帖
更多 
 正在热议
 更多 
 # 你实习是赚钱了还是亏钱了? #
 4674次浏览 45人参与
# 找工作八股要背到什么程度? #
 3454次浏览 65人参与
# 京东开奖 #
 428016次浏览 2438人参与
# 秋招开始捡漏了吗 #
 29926次浏览 209人参与
# 我在牛爱网找对象 #
 202557次浏览 1412人参与
# 用一句话形容你的团队氛围 #
 2882次浏览 44人参与
# 你找工作是从容有余 or 匆忙滚爬? #
 2690次浏览 41人参与
# 入职以后才知道的校招谎言 #
 101483次浏览 646人参与
# 上班后,才发现大学__白学了 #
 5191次浏览 34人参与
# 今年秋招还有金九银十吗 #
 23786次浏览 218人参与
# 同bg的你秋招战况如何? #
 160783次浏览 934人参与
# 今年秋招是回暖还是遇冷 #
 2604次浏览 26人参与
# 五一之后,实习真的很难找吗? #
 90006次浏览 561人参与
# 学历对求职的影响 #
 552017次浏览 3921人参与
# 规定下班时间vs实际下班时间 #
 56747次浏览 332人参与
# 辞职后的日常 #
 16455次浏览 84人参与
# 打工人的精神状态 #
 103126次浏览 1318人参与
# 你喜欢工作还是上学 #
 79113次浏览 865人参与
# Offer比较,求稳定还是求发展 #
 65100次浏览 272人参与
# 分享一个让你热爱工作的瞬间 #
 44213次浏览 395人参与
# 一人一个landing小技巧 #
 128570次浏览 1467人参与
联想公司福利 1505人发布
查看7道真题和解析