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

Posted wbndfjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断table[i] 是否为treeNode,即table[i] 是否是红黑树第一步相关的知识,希望对你有一定的参考价值。

插入或更新节点

根据(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] 是否是红黑树第一步的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树

表排序

hashmap-put方法过程

判断二叉树是否是完全二叉树

链表是否有环

如何判断一个字符串是不是包含另一个字符串