Java 为什么hashmap split方法需要在loHead.treeify(tab)之前确定(hiHead!=Null)

Java 为什么hashmap split方法需要在loHead.treeify(tab)之前确定(hiHead!=Null),java,hashmap,Java,Hashmap,当我阅读hashmap split方法源代码时,我发现了一段源代码: final void split(HashMap<K,V> map, Node<K,V>[] tab, int index, int bit) { TreeNode<K,V> b = this; // Relink into lo and hi lists, preserving order TreeNode<K,V> lo

当我阅读hashmap split方法源代码时,我发现了一段源代码:

    final void split(HashMap<K,V> map, Node<K,V>[] tab, int index, int bit) {
        TreeNode<K,V> b = this;
        // Relink into lo and hi lists, preserving order
        TreeNode<K,V> loHead = null, loTail = null;
        TreeNode<K,V> hiHead = null, hiTail = null;
         ....
        if (loHead != null) {
            if (lc <= UNTREEIFY_THRESHOLD)
                tab[index] = loHead.untreeify(map);
            else {
                tab[index] = loHead;
                if (hiHead != null) // (else is already treeified)
                    loHead.treeify(tab);
            }
        }
       .......
    }
final void split(HashMap映射,节点[]选项卡,int索引,int位){
TreeNode b=此;
//重新链接到lo和hi列表,保留顺序
TreeNode loHead=null,loTail=null;
TreeNode hiHead=null,hiTail=null;
....
if(loHead!=null){

如果(lc方法的输入是一个要拆分的树bin。如果该bin中的所有条目都属于一个或另一个拆分集(即,它们对于新添加的哈希位都具有相同的值),则输入树已经正确。只需将其根设置为新bin值,而另一个为空,即可按原样重用它