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