Implementação do HashMap Java 8
Conforme o seguinte documento de link:Implementação de Java HashMap
Estou confuso com a implementação deHashMap
(ou melhor, um aprimoramento naHashMap
) Minhas consultas são:
primeiramente
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Por que e como essas constantes são usadas?Eu quero alguns exemplos claros para isso. Como eles estão alcançando um ganho de desempenho com isso?
Em segundo lugar
Se você vir o código fonte deHashMap
no JDK, você encontrará a seguinte classe interna estática:
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;
}
}
//...
}
Como isso é usado?Eu só quero uma explicação do algoritmo.