0
点赞
收藏
分享

微信扫一扫

关于hashmap与并发map(Currenthashmap)面试题

若如初梘 2022-02-16 阅读 62

hashmap初始容量2的n次幂的原因?hash算法?hashmap扩容形成环的原因?1.7与1.8的区别?

不清楚;hash算法不了解;不了解;区别:头插法的修改;

HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式_扯淡吧 Pino曹的博客-CSDN博客

0、java1.7中扩容为什么会形成环?

源码中调用put方法的时候 会判断,当前map的size和初始容量的0.75倍相比,如果等于这个值,则需要进行扩容,

扩容的时候需要进行 旧数组转移到新数组的操作。形成环的操作就在转移过程中 因为hashmap是线程不安全的,

多线程进行扩容操作时,就可能会形成环。

1.7

jdk1.8,避免形成环, 下面定义了四个指针,一组高位,一组低位。

分成两组后 高低位切换,没有重新进行rehash ,而是直接把链表断掉,进行几乎均等的拆分,分为两段。

低位还在之前的位置,高位就放在原来的位置加上扩容的长度的位置,这样就不会形成环。

但是仍然不能解决线程安全问题。 于是就会想到concurrentshashmap

1、hashmap初始容量2的n次幂的原因?

2的n次幂的原因是因为位运算比取模效率高,所以选择按位与

要保证(hash%length)= h & (length -1)

2、加载因子为什么是0.75

hashmap&concurrenthashmap原理详解-前美团的兄嘚带你一起面试_哔哩哔哩_bilibili

loadfactor:如果是1 则提高了 hsah碰撞的几率 最大化利用空间

loadfactor:如果=0.5 链表长度很短 查询效率很高 节省时间提高效率,但是浪费空间

所以折中取0.75 经验值

3、jdk1.8中为什么链表长度为8的时候 变成红黑树

泊松分布 统计学公式 当链表长度为8时 再添加到这个链表上的几率很低 所以产生红黑树的几率也不大

举报

相关推荐

0 条评论