2011-05-31 12 views
6

this उदाहरण में, पोस्टर ने हैश कोड विधि को ओवरराइड कर दिया है। मैं समझता हूं कि टकराव की संख्या को कम करने के लिए, लौटे ऑब्जेक्ट के लिए बेहतर हैश मूल्य प्रदान करने के लिए यह किया गया है, और इसलिए Equals() पर कॉल करने के लिए आवश्यक अवसरों की संख्या को कम करें।सी # GetHashCode विधि

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode(); 

वहाँ एक विशेष कारण यह है कि प्रश्न में संख्या चुने गए है:

मैं जानना चाहूंगा क्या, इस एल्गोरिथ्म गणना की गई है कि कैसे है? क्या मैं इसे अपने स्वयं के नंबरों में डाल सकता हूं?

+1

बस जानकारी के लिए, एमएस सी # कंपाइलर (एनन-प्रकार के लिए) '-1134271262' के बीज का उपयोग करता है, और' -1521134295' के गुणक का उपयोग करता है। बस कहें ' –

+0

@MarcGravell: क्या आपके पास इसका स्रोत है? – DeepSpace101

+0

@ दीपस्पेस 101 आईएलडीएएसएम; पी –

उत्तर

4

आम तौर पर आपको प्राइम्स चुनना चाहिए। यह आपको विभिन्न इनपुट पैरामीटर के लिए समान हैश-मान प्राप्त करने से बचने में मदद करता है।

2

प्राइम संख्या आमतौर पर टकराव को कम करने के लिए हैशकोड गणना में उपयोग की जाती है। आप इस iste पर hashCode और रूढ़ अंक के लिए खोज, तो आप इस पर कुछ विस्तृत व्याख्या मिलेगा (ध्यान दें कि यह विशिष्ट टिप्पणी भाषा है):

1

आप आम तौर पर प्राइम नंबर (जैसा ऊपर किया गया है) का उपयोग करना चाहते हैं क्योंकि इससे टकराव का मौका कम हो जाता है (दो उदाहरण एक ही परिणाम उत्पन्न करते हैं)। अधिक जानकारी के लिए, देखें: http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

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