zgodnie z poniższym dokumencie link: Java HashMap ImplementationHashMap Java 8 realizacja
jestem zmieszany z realizacją HashMap
(czy raczej rozszerzeniem w HashMap
). Moje pytania to:
pierwsze
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Dlaczego i jak stosować te stałe? Chciałbym podać kilka wyraźnych przykładów. W jaki sposób osiągają w ten sposób wzrost wydajności?
drugie
Jeśli pojawi się kod źródłowy HashMap
w JDK, znajdziesz następujące statyczne klasy wewnętrzna:
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;
}
}
//...
}
jaki sposób je wykorzystuje? Chcę tylko wyjaśnienia algorytmu.
@HasnainAliBohra: Odpowiadający edytował ten post, aby dostarczyć znacznie więcej informacji. –
@Michael to nie jest zła odpowiedź; Próbowałem powiększyć go o trochę więcej szczegółów w moim. – Eugene
Nierównomierne rozmieszczenie nie zawsze jest oznaką słabych funkcji skrótu. Niektóre typy danych, np. 'String' ma znacznie większą przestrzeń niż kod' int', więc kolizje są nieuniknione. Teraz zależy to od rzeczywistych wartości, takich jak rzeczywiste 'String's, umieszczasz na mapie, czy otrzymujesz równomierną dystrybucję, czy nie. Zła dystrybucja może być wynikiem nieszczęścia. – Holger