按照以下链接文档: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
您放入映射中的实际值(例如real),而不论是否获得均匀分布。不好的分布可能是不幸的结果。