मुझे हाल ही में हैशटेबल्स के बारे में कुछ साक्षात्कारों में ड्रिल किया गया है और जब यह GetHashCode() को ओवरराइड करने में सक्षम है। जब तक मैंने तौलिया में फेंक दिया, तब तक चर्चा गहरी और गहरी हो रही थी।हैशटेबल और डिक्शनरी से संबंधित साक्षात्कार प्रश्न
अब मैं अगली बार तैयार होने के लिए सब कुछ कवर करने के लिए कुछ शोध कर रहा हूं।
मैं पाया है इस उत्कृष्ट लेख है कि मैं चाहते हैं साझा करने के लिए: http://msdn.microsoft.com/en-us/library/ms379571(VS.80).aspx#datastructures20_2_topic5
1) कुछ मैं के साथ बहुत सहज महसूस नहीं करते तथ्य यह है कि शब्दकोश हैश आधारित हैं, लेकिन जाहिरा तौर पर सूचियाँ नहीं हैं । क्या इसका मतलब यह है कि सूची <> और ऐरे [] में खोज करना रैखिक है, जबकि एक शब्दकोश या हैशटेबल में खोज करते समय निरंतर और इसलिए बहुत तेज़ है? क्या यह सब कुछ है?
2) यदि मैं किसी शब्दकोश में एक कुंजी के रूप में कक्षा का उपयोग करता हूं, तो मुझे किसी भी आवश्यक पहचान फ़ील्ड के आधार पर उस वर्ग पर GetHashcode() को ओवरराइड करने की आवश्यकता होती है ताकि उदाहरण अद्वितीय हो सकें। हालांकि यह अभी भी हो सकता है कि दोनों आईडी फ़ील्ड बराबर हैं और एक ही हैशकोड उत्पन्न होगा? यदि ऐसा ही होता है तो उसी हैशकोड के साथ दो उदाहरणों की टक्कर के दौरान क्या होता है?
3) टकराव कैसे हल किया जा सकता है? मैंने शब्दकोश के लिए हैशटेबल और चेनिंग के लिए टकराव के मामले में रीहैशिंग पद्धति के बारे में लेख में पढ़ा है। लेकिन मुझे अभी भी यकीन नहीं है कि यह वास्तव में कैसे काम करता है क्योंकि मैं गणित प्रतिभा नहीं हूं। : - \ क्या कोई इसे बेहतर समझा सकता है कि यह कैसे काम करता है?
कई धन्यवाद, Kave
यदि समान हैशकोड उत्पन्न होता है तो बराबर फ़ंक्शन ऑब्जेक्ट पर निर्धारित समानता के लिए चलाया जाता है। इसलिए उस फ़ंक्शन को ओवरराइड करना भी न भूलें। – Magnus
मैं सिर्फ योगदान देने वाले सभी को धन्यवाद देना चाहता था। मेरे पास एक साक्षात्कार था और उन्होंने हैशसेट लॉल के लिए कहा। एक ही समय में मैंने उन सभी प्रो/कॉन्ट्रा को हशों के रूप में दिया जैसा हमने चर्चा की और वह प्रभावित हुए। साक्षात्कार पास किया। तो यह सही होना चाहिए। ;) – Houman