निम्नलिखित लिंक दस्तावेज़ के अनुसार: जावा हैशपप कार्यान्वयन
मैं 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
एस, आप नक्शे में डालते हैं, चाहे आपको एक समान वितरण मिलता है या नहीं। एक बुरा वितरण सिर्फ बुरी किस्मत का परिणाम हो सकता है।