Java-HashMap中put()方法是如何实现的,内含详细流程图
HashMap
的 put
方法是用于将键值对添加到 HashMap
中。以下是 put
方法的一个简化版本的伪代码实现:
public V put(K key, V value) {
// 计算 key 的 hash 值
int hash = hash(key);
// 找到 bucket 位置
int bucketIndex = indexFor(hash, table.length);
// 遍历链表
for (Entry<K,V> e = table[bucketIndex]; e != null; e = e.next) {
if (e.key.equals(key)) {
V oldValue = e.value; // 存储旧值
e.value = value; // 更新值
return oldValue; // 返回旧值
}
}
// 如果 key 不存在,添加新的 Entry
addEntry(hash, key, value, bucketIndex);
return null; // 没有旧值返回
}
void addEntry(int hash, K key, V value, int bucketIndex) {
// 获取当前 bucket 的头部 Entry
Entry<K,V> e = table[bucketIndex];
// 将新的 Entry 设置为 bucket 的新头部
table[bucketIndex] = new Entry<>(hash, key, value, e);
// 更新大小并检查是否需要调整容量
size++;
if (size >= threshold)
resize(2 * table.length);
}
这里的 hash
函数用于计算键的哈希码,indexFor
用于确定桶(bucket)的索引位置。如果键已经存在于 HashMap
中,则更新其值;如果不存在,将会添加一个新的键值对到链表的头部,并且在必要时调整 HashMap
的大小。
评论已关闭