码迷,mamicode.com
首页 > 其他好文 > 详细

判断table[i] 是否为treeNode,即table[i] 是否是红黑树第一步

时间:2020-06-21 15:33:26      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:大于   instance   存储   容量   超过   ash   amp   长度   代码   

插入或更新节点

根据(n - 1) & hash计算得到插入的数组下标i,然后进行判断

table[i]==null

那么说明当前数组下标下,没有hash冲突的元素,直接新建节点添加。

table[i].hash == hash &&(table[i]== key || (key != null && key.equals(table[i].key)))

判断table[i]的首个元素是否和key一样,如果相同直接更新value。

table[i] instanceof TreeNode

判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对。

其他情况

上面的判断条件都不满足,说明table[i]存储的是一个链表,那么遍历链表,判断是否存在已有元素的key与插入键值对的key相等,如果是,那么更新value,如果没有,那么在链表末尾插入一个新节点。插入之后判断链表长度是否大于8,大于8的话把链表转换为红黑树。

扩容

插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold(一般是数组长度*负载因子0.75),如果超过,进行扩容。

源代码如下:

判断table[i] 是否为treeNode,即table[i] 是否是红黑树第一步

标签:大于   instance   存储   容量   超过   ash   amp   长度   代码   

原文地址:https://www.cnblogs.com/wbndfjj/p/13172489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!