HashMap
2021-07-25 14:13:24 6 举报
hashmap put方法详解
作者其他创作
大纲/内容
否
四舍五入初始化大小为2的次幂int capacity = roundUpToPowerOf2(toSize);
尾插法遍历链表结构,在最后一个节点插入元素
创建对应长度的数组table = new Entry[capacity];
判断该下标元素的key是否相同
返回旧值
(tab = table) == null || (n = tab.length) == 0
n = (tab = resize()).length;
返回当前key对应的值
获取到当前下标对应的Entry 节点,新创建个Entry 节点,使原节点执行新节点的next节点。
(p = tab[i = (n - 1) & hash]) == null
完成
判断数组是否为空
判断是否需要扩容
put操作
判断是否是红黑树节点p instanceof TreeNode
是
计算key的索引,并取出当前索引的元素p = tab[i = (n - 1) & hash];
table == EMPTY_TABLE
返回null
判断该下标元素是否为空
返回当前元素
扩容
JDK1.7 的HashMap 的put方法
判断返回值不等于空并且是否需要替换旧值
初始化完成
判断是否是红黑树节点是否存在该值
判断当前数组是否到达阈值,并且当前计算的桶索引对应的值是否不为空
(size >= threshold) && (null != table[bucketIndex])
判断当前数组是否为空
初始化数组
int oldCap = (oldTab == null) ? 0 : oldTab.length;
是否需要扩容
查询key是否存在
判断是否是空数组
遍历红黑树节点存入数据
进行初始化,初始化方法和扩容方法是同一个
判断key否为空
初始化数组大小16,负载因子0.75
JDK1.8 的HashMap 的put方法
初始化
添加元素span style=\"font-size: inherit;\
putForNullKey(V value)
查询value是否存在
p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))
key == null
扩容resize(2 * table.length);
收藏
0 条评论
下一页