hashmap的put原理
时间: 2023-11-11 08:22:46 浏览: 75
HashMap的put方法实现了将键值对存储到HashMap中的功能。其基本原理是,首先根据键的hashcode值和HashMap的容量计算出该键值对应的桶的位置,然后将该键值对存储到该桶中。
具体步骤如下:
1. 首先,根据键的hashCode值和HashMap的容量计算出该键值对应的桶的位置,即index = (n - 1) & hash(key),其中n为HashMap的容量,hash(key)为键的hashCode值。
2. 然后,检查该桶是否已经存在键值对。如果该桶为空,则直接将键值对存储到该桶中,完成操作。如果该桶不为空,则需要遍历该桶中已有的键值对,查找是否存在与该键相同的键值对。
3. 如果在该桶中找到了与该键相同的键值对,则直接将该键值对的值替换为新的值,并返回旧的值。如果在该桶中没有找到与该键相同的键值对,则将该键值对存储到该桶的链表或红黑树中,完成操作。
需要注意的是,在遍历链表或者红黑树时,需要根据键的equals方法来判断键是否相等,以确保找到的键值对与要存储的键值对的键相同。
另外,如果在存储键值对之后,HashMap中的键值对数量超过了负载因子乘以容量的阈值,就需要进行扩容操作,以保证HashMap的性能。
相关问题
hashmapput原理
HashMap的put()方法用于将键值对存储到HashMap中。它的工作原理如下:
1. 首先,根据传入的键对象计算hashCode()方法的返回值,确定该键值对应的哈希桶(数组)的索引位置。
2. 如果该索引位置尚未存储任何键值对,直接将键值对存储到该位置。
3. 如果该索引位置已经存储了键值对,可能存在以下两种情况:
a) 如果新传入的键对象与已经存在的某个键对象通过equals()方法比较相等,则认为它们是同一个键对象,此时会用新的值替换旧的值。
b) 如果新传入的键对象与已经存在的所有键对象都不相等,则认为它们是不同的键对象,并且发生了哈希冲突。在这种情况下,会使用链表或红黑树来解决冲突。具体来说,新的键值对会被添加到链表或红黑树的末尾(JDK8之后,链表长度超过8时会转换成红黑树),以保持键值对的插入顺序。
4. 如果链表或红黑树长度超过了阈值(JDK8默认为8),则会进行扩容操作,将现有的哈希桶数组重新分配更大的空间,并重新计算每个键值对的索引位置。
总结来说,HashMap的put()方法通过计算hashCode()方法的返回值来确定键值对在哈希桶数组中的位置,处理哈希冲突,并根据键对象的相等性来进行值的替换或插入操作。
hashmap put方法原理 java
HashMap的put方法是用来添加键值对的。
在HashMap中,每个键值对都被封装成了一个Entry对象,该对象包含了key和value两个属性。当调用put方法时,首先会通过key的hashCode方法生成一个哈希值,然后根据这个哈希值计算出该键值对在HashMap中的位置。
如果该位置上已经有了一个Entry对象,那么就需要进行键值对的比较,如果key相同,则用新的value替换旧的value。如果key不同,则发生哈希冲突,该位置上的Entry对象会被添加到该位置的链表中。
如果该位置上没有Entry对象,则直接将该键值对作为一个新的Entry对象插入到HashMap中。
需要注意的是,当HashMap中的键值对数量达到了容量的75%时,就会触发扩容操作,此时会将原有的Entry对象重新分配到更大的数组中,以提高HashMap的性能和空间利用率。
阅读全文