2010-03-16 3 views
12

मैं सोच रहा था कि .NET HashSet<T> हैश कोड पर पूरी तरह से आधारित है या यह समानता का भी उपयोग करता है या नहीं?हैश हैशसेट विशिष्टता गणना पूरी तरह से हैश कोड पर आधारित है?

मेरे पास एक विशेष वर्ग है कि मैं संभावित रूप से लाखों उदाहरणों को तुरंत चालू कर सकता हूं और एक उचित मौका है कि कुछ हैश कोड उस बिंदु पर टकराएंगे।

मैं इस वर्ग के कुछ उदाहरणों को स्टोर करने के लिए हैशसेट का उपयोग करने पर विचार कर रहा हूं और सोच रहा हूं कि यह वास्तव में करने योग्य है - अगर तत्व की विशिष्टता केवल अपने हैश कोड पर निर्धारित होती है तो वास्तविक अनुप्रयोगों के लिए मेरे लिए इसका कोई उपयोग नहीं है

एमएसडीएन दस्तावेज इस विषय पर अस्पष्ट प्रतीत होता है - किसी भी ज्ञान की सराहना की जाएगी

उत्तर

14

नहीं, यह समानता का भी उपयोग करता है। परिभाषा के अनुसार, हैश कोड को अद्वितीय होने की आवश्यकता नहीं है - जो कुछ भी मानता है वह टूट जाएगा। HashSet<T> समझदार है। यह हैश कोड पीढ़ी और समानता परीक्षण दोनों करने के लिए IEqualityComparer<T> (EqualityComparer<T>.Default पर डिफ़ॉल्ट) का उपयोग करता है।

+1

ग्रेट - यही वही है जो मैंने आशा की थी - एमएसडीएन सिर्फ दस्तावेज में स्पष्ट करने में विफल रहता है – RobV

संबंधित मुद्दे