全网最全HashMap面试题整理

话不多说,直接看题

1.JDK1.7版本,HashMap的数据结构是什么?

答:数组加单向链表

2.什么叫做Hash桶

答:数组中的单向链表

3.HashMap的数组长度为什么必须是2的幂?

答:因为在计算元素下标(索引)时是根据hash&数组长度-1,如果不是数组长度不是2的幂,那么数组长度-1的二进制额某一位可能不是一,就会出现某些下标永远存不到数据

4.HashMap的默认负载因子是多少,作用是什么?

答:默认的负载因子是0.75,,作用是数组长度*负载因子=阈值(扩容条件)

5.HashMap的默认负载因子为什么是0.75?

答:官方解释是时间与空间的平衡

如果负载因子过大,就会牺牲时间,利用空间

如果负载因子过小,就会牺牲空间,利用时间

6.HashMap数组最大长度是多少?

答:1<<30

7.HashMap数组最大长度为什么是1 << 30?

答:因为HashMap的数组长度必须是2的幂,而数组的最大长度是int类型,即Integer.Max,Integer.Max为1<<31 - 1,所以HashMap的数组长度只能是1<<30

8.什么叫做Hash碰撞/冲突?

答:hash值相同,则计算出的下标就相同,这样就造成了hash碰撞

9.HashMap何时扩容?

答:当元素个数>=阈值时就会扩容

10.HashMap扩容机制是什么?

答:原来的两倍

11.HashMap存入null键的位置?

答:下标为0的地方

12.什么叫做Hash回环?

答:在多线程模式下,当一个线程不断的遍历集合,另一个线程不断的添加数据,添加数据就会扩容,则就会出现hash回环。

注意:Hash回环参数完全就该程序员背锅,因为HashMap中明确说明了HashMap不是一个线程安全的

13.JDK1.7版本和JDK1.8版本的HashMap的区别

答:1.7中HashMap底层是数组+单向链表

且单向链表中插入元素是用头插法

1.8中HashMap底层是数组+单向链表+红黑树

且单向链表中插入元素是用尾插法

1.7中是运用散列算法计算hash值,而1.8中是通过低16^高16位计算hash值,使其更加散列

14.JDK1.8版本HashMap为什么添加红黑树的数据结构?

答:因为链表查询慢,红黑树查询快

15.JDK1.8版本什么时候由数组+链表变成数组+红黑树

答:当链表的长度>8且数组元素>64就会由链表转换为红黑树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值