Почему метод разделения hashmap должен определить, что (hiHead! = Null) перед loHead.treeify (tab) - PullRequest
0 голосов
/ 06 января 2020

Когда я прочитал исходный код метода разделения хеш-карт, я обнаружил фрагмент исходного кода:

    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. Официальный комментарий - «еще древовидно».

1 Ответ

0 голосов
/ 06 января 2020

Вход в метод - это древовидная корзина, которую нужно разделить. Если все записи в этой ячейке попадают в один или другие разделенные наборы (то есть все они имеют одинаковое значение для вновь добавленного бита ha sh), то дерево ввода уже корректно. Его можно просто использовать как есть, сделав его root новым значением bin, а другое - пустым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...