Когда я прочитал исходный код метода разделения хеш-карт, я обнаружил фрагмент исходного кода:
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);
}
}
.......
}
Я не могу понять, почему с помощью loHead.treeify (tab); раньше, если (hiHead! = Null) необходимо суждение. Прежде всего, я понимаю, что hashmap используется в одном потоке, поэтому я не могу думать о каких-либо отношениях между hiHead и loHead. Официальный комментарий - «еще древовидно».