java集合中的常见考点

1.讲一下集合中的 fail-fast 机制 ?

解释: 主要就是在iterater集合迭代的过程中发生集合的结构遭到破坏的情况下,系统抛出异常的过程

参考链接:https://blog.csdn.net/zymx14/article/details/78394464
fail-fast的简介:
fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentModificationException异常。 fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测bug。
在这里插入图片描述

2. java集合类

在这里插入图片描述

3.hashMap底层原理

在这里插入图片描述
在这里插入图片描述
解释: 要知道entry里面有4个属性,key,value,hashcode,next(指向下一个entry的指针)
在这里插入图片描述
在这里插入图片描述
hashMap是2的整数次幂的原因可以参考下述链接来看:
https://blog.csdn.net/qq_40241957/article/details/84995597

问题一:hashMap为什么会在并发访问的时候形成闭环,从而get()操作的时候形成死环?
解释:主要是在hashMap扩容的那个时候,这个时候多个线程同时执行rehash操作,那么就有可能发生闭环,见下面参考链接
参考链接:https://blog.csdn.net/hll174/article/details/50915346
闭环以后形成死环的原因: get()操作本来就是在找到一个table[i]之后,也就是我们说的“桶”,然后逐个遍历这个“桶”下的所有entry的过程,这个时候如果出现闭环,那么get()操作一直耗在这个闭环里面,肯定就是死循环了
在这里插入图片描述
hashmap1.7和1.8的区别?
在这里插入图片描述
解释: 其实就是说1.8的时候,当一个“桶”中的元素个数超过8的时候,那个“桶”的结构变成“红黑树”

4.ConcurrentHashMap

ConcurrentHashMap与HashMap相比,最关键的是要理解一个概念:segment。 Segment其实就是一个Hashmap 。Segment也包含一个HashEntry数组,数组中的每一个HashEntry既是一个键值对,也是一个链表的头节点。 Segment对象在ConcurrentHashMap集合中有2的N次方个(解释: 之所以是2的n次方个的原因是为了方便“与运算”,我们记得位运算的效率要高于取模运算的效率(这也是计算机是二进制的原因),所以是2的n次方,还可以参考hashmap为什么扩容是2的n次方,参考链接:https://blog.csdn.net/qq_40241957/article/details/84995597
),共同保存在一个名为segments的数组当中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小疑问: 为什么一定要按顺序锁定所有段,才不会发生死锁?如果不按顺序锁定所有段,就会发生死锁???
答:
在这里插入图片描述

5.HashTable底层原理

在这里插入图片描述
在这里插入图片描述

6.HashSet

解释: HashSet底层是基于HashMap实现的)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值