HashMap之put方法源码解读.docx

您所在的位置:网站首页 hashmap尾插法图解 HashMap之put方法源码解读.docx

HashMap之put方法源码解读.docx

2024-07-10 23:32| 来源: 网络整理| 查看: 265

HashMap 之 put 方法源码解读 HashMap 是 Java 中一种常用的数据结构,用于存储键值对。其中,put 方法是 HashMap 中最重要的方法之一,负责将键值对存储到HashMap 中。在本文中,我们将对 HashMap 的 put 方法的源码进行详细解读,分析put 方法源码中的内在逻辑关系,欣赏源码独特之美,从中学习更为精致的编程思维。 让我们看一下 put 方法的源码: ```java public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } ``` 可以看到,put 方法实际上调用的是 putVal 方法。putVal 方法的参数包括 hash、key、value、onlyIfAbsent 和 evict,其中 hash 是 key 的hashCode经过高16位和低16位异或运算后的结果,key 是要存储的键值,value 是要存储的值,onlyIfAbsent 表示是否只在不存在时存储,evict 表示是否驱逐旧值。 接下来,让我们深入分析 putVal 方法的源码: ```java final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node[] tab; Node p; int n, i; if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length; if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null); else { // ... } } ``` 可以看到,putVal 方法首先判断 table 数组是否为空,如果为空,则调用 resize 方法将其初始化。resize 方法会将 table 数组的容量和阈值都扩大为原来的2倍。 接下来,putVal 方法会根据 key 的hashCode计算出要存储的数组索引位置,然后判断该索引位置是否为空,如果为空,则创建一个新的链表头节点,并将其存储到数组中。如果该索引位置已经有值,则表示链表头节点已经存在,需要继续执行 put 操作。 在 put 操作中,如果链表头节点已经存在,则需要遍历链表,找到要存储的键值对的位置,并将其存储到链表中。如果链表头节点不存在,则创建一个新的链表头节点,并将其存储到数组中。 put 方法的源码解读可以分为两大步骤:判断 table 数组是否为空,并将其初始化;根据 key 的hashCode计算出要存储的数组索引位置,并执行 put 操作。 通过对 put 方法源码的解读,我们可以学习到 HashMap 中的链表结构和扩容机制,并体会到源码的独特之美。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3