Java基础--HashMap面试最详细知识点总结

一开始以为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节点也变成了一

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值