2016-07-07 8 views
5

मेरा दोस्त आज मुझे एक साक्षात्कार प्रश्न के बारे में पूछ रहा था।हैशपैप से बचा जा सकता है?

हैशमैप को रोकने/टालने का कोई तरीका है? साक्षात्कारकर्ता एक सुराग एक हुक जिसके द्वारा rehashing

मैं HashMap कोड में देख कोशिश बचा जा सकता है और इस तरह के रूप में जल्द ही के रूप में यह एक करने के लिए लोड फैक्टर यह rehashes

लोड फैक्टर स्थापना हिट लग रहा है कि वहाँ दे दी है उच्च मूल्य केवल rehashing प्रक्रिया में देरी कर सकते हैं

Am अपने सभी किसी को सही दिशा में मुझे इंगित कर सकते हैं अगर यह मदद कर सकते हैं

rehashing को रोकने के लिए संभव

+0

प्रारंभिक क्षमता लोड कारक द्वारा विभाजित की जाने वाली वस्तुओं की अधिकतम संख्या से बड़ी है? – immibis

+0

हाँ, लोड कारक को ट्यून करके। और हां, अगर आप जानते हैं कि कितने तत्व जोड़े जाएंगे तो पूरी तरह से बचना संभव है। –

+6

Sigh ... एक अन्य साक्षात्कारकर्ता जो यह जांचना चाहता है कि संभावनाओं ने जावा रनटाइम के स्रोत को याद किया है ... मुझे नहीं लगता कि इस तरह के प्रश्न पूछने का बिंदु क्या है। – ajb

उत्तर

5

हाँ, यह हो सकता है av में उलझन में है, तो अगर आप पहले से ही अपने हैशप के आकार को जानते हैं तो ओडेड।

सेट loadFactor = 1 (डिफ़ॉल्ट मान 0.75 है)

initialCapacity = size of hashmap + 1 (डिफ़ॉल्ट मान 16 है)।

अपने hashmap का दृष्टांत को

public HashMap(int initialCapacity, float loadFactor) 

यह HashMap वर्ग से नीचे दिए कोड स्निपेट में क्योंकि काम करेंगे, हालत (size >= threshold) संतुष्ट कभी नहीं होगा निम्नलिखित निर्माता का प्रयोग करें, तो hashtable आकार दिया कभी नहीं है।

void addEntry(int paramInt1, K paramK, V paramV, int paramInt2) 
{ 
    if ((size >= threshold) && (null != table[paramInt2])) 
    { 
     resize(2 * table.length); 
     paramInt1 = null != paramK ? hash(paramK) : 0; 
     paramInt2 = indexFor(paramInt1, table.length); 
    } 
    createEntry(paramInt1, paramK, paramV, paramInt2); 
} 
संबंधित मुद्दे