HashMap कक्षा में विधि put
HashMap में तत्वों को जोड़ने के आरोप में से एक है और
void addEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
आप इस विधि में देख सकते हैं है HashMap जहां अगर सीमा मधुमक्खी है आकार दिया जाता है: यह एक तरीका है addEntry नाम पर है जो कोड के रूप में इस फोन करके यह करता है n पार हो गया, इसलिए मैं आकार बदलने के क्रम में put
और addEntry
के लिए अपनी खुद की विधियों को श्रेणी हैश मैप को विस्तारित करने और अपने स्वयं के तरीकों को लिखने का प्रयास करूंगा। कुछ की तरह:
package java.util;
public class MyHashMap<K, V> extends HashMap {
private V myPutForNullKey(V value) {
for (Entry<K, V> e = table[0]; e != null; e = e.next) {
if (e.key == null) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
myAddEntry(0, null, value, 0);
return null;
}
public V myPut(K key, V value) {
if (key == null)
return myPutForNullKey(value);
if (size < table.length) {
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K, V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
myAddEntry(hash, key, value, i);
}
return null;
}
void myAddEntry(int hash, K key, V value, int bucketIndex) {
Entry<K, V> e = table[bucketIndex];
table[bucketIndex] = new Entry<K, V>(hash, key, value, e);
size++;
}
}
आप put
और addEntry
के बाद से अपने स्वयं के तरीकों लिखने के लिए की आवश्यकता होगी अधिभावी नहीं किया जा सकता और आप भी, क्योंकि यह put
अंदर कहा जाता है putForNullKey
के लिए भी ऐसा ही करने की आवश्यकता होगी। put
में एक सत्यापन सत्यापित करने के लिए आवश्यक है कि तालिका पूर्ण होने पर हम ऑब्जेक्ट डालने की कोशिश नहीं कर रहे हैं।
नक्शा भरने पर क्या होना चाहिए और आप एक और तत्व डालने का प्रयास करते हैं? – biziclop
बस एक एफवाईआई के रूप में, हैश टेबल को अपने कीस्पेस को संपीड़ित करने की आवश्यकता है क्योंकि आप प्रत्येक संभावित कुंजी के लिए मान रखने के लिए मेमोरी स्पेस के 2^31 * 4 बाइट आरक्षित नहीं कर सकते हैं। इसलिए, हैश टेबल आमतौर पर हैश को छोटा कर देते हैं और टक्कर के लिए लिंक्ड सूचियों का उपयोग करते हैं। लोडफैक्टर घुमावदार हैश से अधिक बिट्स का उपयोग शुरू होने से पहले जुड़े हुए अधिकतम आकार को इंगित करता है। इसलिए, 0 लंबाई से जुड़ी सूचियां समझ में नहीं आतीं: आप इसमें कुछ भी स्टोर नहीं कर सकते हैं। – chacham15