hashmap1.7怎么插入数据
时间: 2023-06-02 10:04:19 浏览: 104
对于您的问题,我可以回答:在HashMap1.7中,要插入数据可以使用put(key, value)方法。其中,key是用于查找元素的键,value是键对应的值。如果HashMap中已经存在该键,则会覆盖之前的值,否则会将键值对插入到HashMap中。
相关问题
HashMap1.7和1.8插入数据的具体流程
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),就将数组扩容为原来的两倍,并重新计算每个元素的位置。
HashMap1.7 底层实现原理
HashMap1.7 的底层实现原理主要基于数组和链表实现的,具体如下:
1. 数组:HashMap1.7 底层采用数组来存储数据,数组的长度是固定的,并且必须是2的幂次方,这是因为在计算元素在数组中的位置时,采用的是位运算,而2的幂次方可以使用位运算来代替取模运算,从而提高计算效率。
2. 链表:当多个元素的 hashcode 值相同时,它们会被存储在同一个数组位置上,这时就会形成一个链表来存储这些元素。在 HashMap1.7 中,采用的是单向链表,每个节点包含了 key、value 和指向下一个节点的指针。同时,每个数组位置上都有一个指向链表头部的指针,用来方便查找和添加元素。
3. hash 函数:HashMap1.7 中的 hash 函数采用了位运算的方式,先将 key 的 hashcode 值与 (length - 1) 进行与运算,得到的结果即为元素在数组中的位置。这种方式可以有效地避免 hash 冲突,提高查找和添加元素的效率。
4. 扩容:当 HashMap1.7 中元素的数量达到了负载因子(默认为0.75)乘以数组长度时,就会触发扩容操作。扩容时,会将数组长度扩大为原来的两倍,并重新计算每个元素在数组中的位置,将它们插入到新的数组中。同时,由于原来的链表可能会被拆分成多个链表,所以需要重新组织链表结构,使得每个链表只包含一个位置上的元素。
综上所述,HashMap1.7 底层实现原理主要基于数组和链表实现的,采用了位运算的方式来计算元素在数组中的位置,同时支持扩容操作,从而提高了查找和添加元素的效率。
阅读全文