HashMap常见面试题

1.hashMap底层数据结构是什么?
数组+链表+红黑树

2.负载因子是什么?
决定扩容的一个因素

3.负载因子选取过大会怎样,过小呢?
过大会使链表过长,降低查找效率
过小会频繁扩容,导致浪费空间

4.扩容的具体具体操作
当集合元素个数超过容量的0.75(默认负载因子),会使集合的容量翻倍,并重新计算hash和桶下标,然后将桶下标发生改变的元素迁移到新的位置。

5.为什么hashMap的容量为2^n
默认情况下hashMap的初始容量为16,假设某个元素的hash为17
计算桶下标的方式为:17%16=1在计算机中的实现为17-(17/16)*16=1
于是可以优化使用位运算 17&(16-1)=1
00010001 17
00001111 15
容量使用2^n可以使用位运算提高计算桶下标的速度

6.hashMap多线程下访问会出现什么情况
可能出现死链或者丢失数据,hashMap非线程安全的,不建议在多线程下使用

7.hash 算法 h = 31 * h + val[i] 为什么使用 31而不是其他
质数可以使计算的hash值更均匀
31*h=(h<<5)-h,java中使用位运算进行优化,提高运算速度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值