












红黑树是一个自平衡的二叉搜索树。





转换红黑树那一段,是尝试转换红黑树,方法中会判断当前hashmap的值是否大于64,大于的话再转换红黑树。


这里的e.next==null的情况也需要拆分到新数组中-> newTab[e.hash & (newCap - 1)] = e;
而且红黑树也要遍历拆分到新数组中。

👆如果是红黑树的话,需要的处理逻辑要再多一点

上面第二段的代码表示的意思是, h先赋值了key.hashCode() 然后 h 右移16位,然后与key.hashCode 异或。
第三段是用-1后按位与预算代替了取模运算(数组长度必须是2的n次幂)。




其中ConcurrentHashMap可以参考
Javaguide
文章讲述了在哈希表扩容时,如果值大于64,会将红黑树进行转换。涉及到了数组拆分、红黑树节点的遍历以及使用hashCode操作(包括右移、异或和按位与)。
600

被折叠的 条评论
为什么被折叠?



