HashMap1.7和1.8插入数据的具体流程
时间: 2024-05-21 19:15:29 浏览: 74
ConcurrentHashMap的实现原理(JDK1.7和JDK1.8).pdf
HashMap1.7和1.8在插入数据时的具体流程如下:
HashMap1.7:
1. 首先,根据 key 的 hashCode() 方法返回值计算出该 key 的哈希值。
2. 然后,根据哈希值计算出该 key 在数组中的下标。
3. 如果该下标处没有元素,就将该 key-value 对直接放入该位置。
4. 如果该下标处已经存在元素,就遍历该位置的链表,判断是否有相同的 key,如果有,就用新的 value 替换旧的 value;如果没有,就将该 key-value 对加入到链表的末尾。
5. 如果链表长度达到了阈值(默认为8),就将链表转换为红黑树。
6. 如果数组大小达到了阈值(默认为64),就将数组扩容为原来的两倍,并重新计算每个元素的位置。
HashMap1.8:
1. 首先,根据 key 的 hashCode() 方法返回值计算出该 key 的哈希值。
2. 然后,通过哈希值和数组长度的位与操作,计算出该 key 在数组中的下标。
3. 如果该下标处没有元素,就将该 key-value 对直接放入该位置。
4. 如果该下标处已经存在元素,就使用 CAS 操作(无锁并发操作),将该 key-value 对插入链表或红黑树中。
5. 如果链表长度达到了阈值(默认为8),就将链表转换为红黑树。
6. 如果红黑树长度达到了阈值(默认为6),就将红黑树退化成链表。
7. 如果数组大小达到了阈值(默认为64),就将数组扩容为原来的两倍,并重新计算每个元素的位置。
阅读全文