В соответствии со следующим документом ссылки: Реализация Java HashMap
Я запутался с реализацией HashMap (вернее, улучшением в HashMap). Мои запросы:
Во-первых,
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Почему и как используются эти константы? Я хочу для этого несколько ясных примеров. Как они достигают выигрыша в производительности с этим?
Во-вторых
Если вы видите исходный код HashMap в JDK, вы найдете следующий статический внутренний класс:
static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
    HashMap.TreeNode<K, V> parent;
    HashMap.TreeNode<K, V> left;
    HashMap.TreeNode<K, V> right;
    HashMap.TreeNode<K, V> prev;
    boolean red;
    TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
        super(arg0, arg1, arg2, arg3);
    }
    final HashMap.TreeNode<K, V> root() {
        HashMap.TreeNode arg0 = this;
        while (true) {
            HashMap.TreeNode arg1 = arg0.parent;
            if (arg0.parent == null) {
                return arg0;
            }
            arg0 = arg1;
        }
    }
    //...
}
Как он используется? Я просто хочу объяснить алгоритм.



