hashmap 源码分析 面试题

8 篇文章 0 订阅
7 篇文章 0 订阅

因为要最近要面试,冲刺挑战一下,下面是准备的中级面试题--hashmap 源码分析的面试题

大家也可以关注我的个人博客:http://idearyou.cn/,个人公众号:纯洁的麦田

1、hashcode与equals区别
答:如果对象的hashcode相等,内容不一定相等
equals内容相等,,hashcode一定相等
 
2、重写equals为啥要重写hashcode
答:因为要equals内容相等,hashcode不一定要冲突
 
3、hashmap和hashtable区别
答:hashmap可以存放空,不安全,效率高,hashtable加锁,安全,不能放空
 
4、如何理解hashcode碰撞
答:对象不等,但hashcode会相同,导致hashcode碰撞
 
5、如何理解hashcode碰撞
 
6、hashmap的put方法如何实现
答:1.Jdk1.7采用数组+链表通过头插入法(在多线程扩容数组,可能会产生死锁)实现,采用hashEntry封装键值对。
2.根据key计算hashcode得出index存放下标,如产生碰撞则采用链表存放。
3.hashmap根据key查询键值对时间没有产生冲突情况下时间复杂度为O1,查询hashmap产生冲突的key时间复杂度为ON,所以1.8中当链表长度大于8并且长度为64情况下转红黑树存放
 
7、hashmap扩容如何实现
答:hashmap数组默认大小16,加载因子0.75,扩容对原数据乘2
 
8、扩容加载因子为啥是0.75
答:科学家证明0.75是黄金比例,加载因子小,key冲突比较小,浪费空间,因子越大,冲突较多,节约内存
 
9、hashmap为空,数组存放在那个位置
答:存放下标为0,第一个链表
 
10、haskmap是否可以存放自定义对象为key
答:可以,因为是泛型
 
11、hashmap在Jdk1.7和jdk1.8中区别
答:1.7:数组+链表,1.8:数组+链表+红黑树
 
12、jdk1.7中扩容死循环有遇见吗
答:在1.7中使用头插入法,多线程情况下会导致死循环
 
13、hashmap在Jdk1.8较1.7有哪些改进
答:尾插入法、解决红黑树、链表长度 > 8就转换红黑树
 
14、hashmap在1.8中为啥改成红黑树
答:如果下标index冲突过多,导致链表长度过长,时间复杂度为On,查询速度慢,当链表长度 > 8并且容量 > 64,转成红黑树,时间复杂度变O(long)
 
15、hashmap不安全,有哪些替代方案
答:ConcurrentHashmap、conllections、synize加锁

个人博客:
名称:纯洁的麦田
链接:http://www.idearyou.cn/
描述:争取哪一天做上架构师
公众号:纯洁的麦田

另外:个人公众号,每天有新java文章,还有中高级面试题分享

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值