TryGetValue और ContainsKey उस आकार पर बहुत तेज होना चाहिए, जब तक कि कुंजी अच्छी तरह से वितरित हैश हो।
एक शब्दकोश में "बाल्टी" की एक सूचकांक संख्या है। जब यह किसी कुंजी द्वारा मूल्य जोड़ता है या देखता है तो यह GetHashCode() द्वारा लौटाए गए मान को ले जाएगा, यह बाल्टी की संख्या से कम होने के लिए फिर से नीचे है (आमतौर पर मॉड्यूलो की तरह कुछ सरल है, लेकिन कार्यान्वयन परिभाषित नहीं किया गया है) और प्रासंगिक बाल्टी में देखो।
बाल्टी में वर्तमान में शून्य या अधिक आइटम होंगे। शब्दकोश प्रत्येक आइटम की तुलना कुंजी के साथ करेगा .quals()।
सही बाल्टी खोजने का पहला बिट निरंतर समय ओ (1) में होने वाला है। बाल्टी में चाबियों के साथ कुंजी की तुलना करने का दूसरा बिट रैखिक समय ओ (एन) में होगा जहां एन केवल उस बाल्टी में वस्तुओं की संख्या से संबंधित है, पूरे संग्रह में नहीं।
आम तौर पर प्रत्येक बाल्टी में बहुत कम आइटम होना चाहिए (बाल्टी की संख्या इस मामले को रखने की कोशिश करने के लिए बढ़ेगी) ताकि ऑपरेशन अनिवार्य रूप से निरंतर समय हो।
यदि आपके हैश कोड खराब तरीके से कार्यान्वित किए गए हैं, तो उसी बाल्टी में बहुत सी चाबियां होंगी। समय जटिलता ओ (एन) के करीब और करीब आ जाएगी, जैसा कि किसी वस्तु के साथ जानबूझ कर खराब गेटहाशकोड के साथ प्रयोग करके देखा जा सकता है जो हर बार 0 देता है। इसके बदतर मामले में यह एक सूची से भी बदतर है, क्योंकि एक सूची भी ओ (एन) है, लेकिन शब्दकोश में अधिक ओवरहेड है।
क्या इसका कोई मतलब है कि आपको चिंता करनी चाहिए? नहीं, यहां तक कि अपेक्षाकृत भद्दा हैशिंग विधियों को अपेक्षाकृत अच्छे परिणाम देना चाहिए। यदि आप एक स्ट्रिंग कुंजी का उपयोग कर रहे हैं, तो शायद यह पहले से ही पर्याप्त से अधिक होने जा रहा है। यदि आप एक साधारण अंतर्निर्मित प्रकार का उपयोग कर रहे हैं, तो और भी बहुत कुछ।
यदि आपको लगता है कि शब्दकोश को एक्सेस करना धीमा है, तो आप इस पर ध्यान देना चाहते हैं और या तो GetHashCode() विधि को ठीक करना चाहते हैं या एक IqualityComparer (जो आपको GetHashCode() और बराबर के लिए बाहरी नियमों को परिभाषित करने देता है () शब्दकोश, हैशसेट, आदि के साथ उपयोग के लिए)।
सबसे अधिक संभावना है, 3000 कुछ भी नहीं है, यह ठीक रहेगा।
इसे आज़माएं, मापें और देखें! – Brian