一开始以为java hashmap的面试问的会比较基础,比较简单,但是最近看了敖丙面试的一个视频,别人面试时回答关于hashmap的知识点总结,深感自己不足。而且面试官问的也比较细,有深度。
原帖:HashMap知识点
HashMap在Java后台开发中面试的频率算很高的。但问的有多细还得看面试官了。
还是需要再继续努力。
这篇就针对面试的常见问题来写知识点吧。
Q:你能说一下HashMap的数据结构吗?
A: Hashmap在1.7和1.8之间做了一个比较大的改变。
在JDK1.7之前,HashMap的数据结构是数组+链表。它的数据节点是一个Entry节点。它的一个内部类。数据的插入过程是头插法(先将原位置的数据后移一位,再将数据插入到该位置)
头插法有什么坏处呢?就是可能会形成死循环。当扩容resize的时候,首先会resize,然后调用transfer方法,把里面的一些Entry进行了rehash,在这个过程中,可能会造成一个链表的循环,就可能在下一次Get中出现一个死循环的情况。也有可能没有加锁,所以在多个线程并发的情况下,不能对数据保证安全。put进去的值取出来还是put进去的一个值。
而JDK1.8之后对HashMap进行了一个比较大的变化。变成了一个链表+数组+红黑树的一个结构(当链表悬挂的>8时自动转成红黑树)。把原来的Entry节点也变成了一