次のリンクドキュメントに従って: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;
}
}
//...
}
使い方は?アルゴリズムの説明が欲しいだけです。
String
、一部のデータ型は、int
ハッシュコードよりもはるかに大きな値空間を持っているため、衝突は避けられません。今度は、実際String
のsのように、均等な分布が得られるかどうかに関係なく、マップに入れる実際の値に依存します。悪い分布は単に不運の結果である可能性があります。