आपको इसे लागू करने की आवश्यकता नहीं है। यदि आप अपनी खुद की इक्वाल्स() विधि लिखते हैं तो मैं कुछ GetHashCode कार्यान्वयन का उपयोग करने की अनुशंसा करता हूं जो हैशसेट को तोड़ नहीं देता है। उदाहरण के लिए आप एक स्थिर मूल्य (आमतौर पर 42) वापस कर सकते हैं। हैशसेट प्रदर्शन नाटकीय रूप से घट जाएगा, लेकिन कम से कम यह अभी भी काम करेगा - आपको कभी पता नहीं चलेगा कि भविष्य में कौन सा कोड उपयोग/संपादित/बनाए रखेगा। (संपादित करें: आप एक चेतावनी लॉग इन करने की है, तो इस तरह के एक वर्ग जल्दी हाजिर प्रदर्शन की समस्याओं के लिए एक टुकड़े किए गए संरचना में प्रयोग किया जाता है चाहते हो सकता है)
संपादित करें: केवल अपने गुणों के हैश कोड गठबंधन करने के लिए XOR का उपयोग नहीं करते
यह पहले से ही दूसरों द्वारा कहा जा चुका है कि आप बस अपनी सभी संपत्तियों के हैश कोड जोड़ सकते हैं। केवल एक्सओआर का उपयोग करने के बजाय मैं परिणाम गुणा करने के लिए प्रोत्साहित करता हूं। यदि दोनों मान बराबर हैं (उदा। 0xA^0xA == 0x0
) तो XOR का परिणाम 0 मान हो सकता है। इसे 0xA * 0xA
, 0xA * 31 + 0xA
या 0xA^(0xA * 31)
का उपयोग करके आसानी से सुधार किया जा सकता है।
फिर भी, मेरे उत्तर का इरादा यह है कि किसी भी हैश फ़ंक्शन एक से बेहतर है जो बराबर के अनुरूप नहीं है - भले ही यह केवल स्थिर मान देता है। बस गुणों के किसी भी सबसेट का चयन करें (किसी से भी नहीं) आप समानता के लिए उपयोग करते हैं और परिणामों को एक साथ फेंक देते हैं। हैश कोड के लिए गुणों का चयन करते समय, उन छोटे सबसेट्स को पसंद करते हैं जो संयोजन बहुत ही अद्वितीय हैं (उदाहरण के लिए पहला नाम, अंतिम नाम, जन्मदिन - पूरा पता जोड़ने की कोई आवश्यकता नहीं)
अध्याय 9 * (यदि आपके पास पहले से है) में अध्याय 9 * अच्छी तरह से तैयार प्रकार * में एक नज़र डालें और आपको पता चलेगा कि इसे कब ओवरराइड करना है। – Oliver