java集合中的常见考点

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

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

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

2. java集合类

java集合中的常见考点

3.hashMap底层原理

java集合中的常见考点
java集合中的常见考点
解释: 要知道entry里面有4个属性,key,value,hashcode,next(指向下一个entry的指针)
java集合中的常见考点
java集合中的常见考点
hashMap是2的整数次幂的原因可以参考下述链接来看:
https://blog.****.net/qq_40241957/article/details/84995597

问题一:hashMap为什么会在并发访问的时候形成闭环,从而get()操作的时候形成死环?
解释:主要是在hashMap扩容的那个时候,这个时候多个线程同时执行rehash操作,那么就有可能发生闭环,见下面参考链接
参考链接:https://blog.****.net/hll174/article/details/50915346
闭环以后形成死环的原因: get()操作本来就是在找到一个table[i]之后,也就是我们说的“桶”,然后逐个遍历这个“桶”下的所有entry的过程,这个时候如果出现闭环,那么get()操作一直耗在这个闭环里面,肯定就是死循环了
java集合中的常见考点
hashmap1.7和1.8的区别?
java集合中的常见考点
解释: 其实就是说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.****.net/qq_40241957/article/details/84995597
),共同保存在一个名为segments的数组当中。
java集合中的常见考点
java集合中的常见考点
java集合中的常见考点
小疑问: 为什么一定要按顺序锁定所有段,才不会发生死锁?如果不按顺序锁定所有段,就会发生死锁???
答:
java集合中的常见考点

5.HashTable底层原理

java集合中的常见考点
java集合中的常见考点

6.HashSet

解释: HashSet底层是基于HashMap实现的)
java集合中的常见考点