equals()
equals() ऑब्जेक्ट की सामग्री की तुलना करता है कि क्या वे समान हैं। इसे आमतौर पर समानता तुलना (equality comparison) कहा जाता है, और यदि आप equals() को ओवरराइड नहीं करते हैं, तो यह आंतरिक रूप से == के समान होता है, इसलिए यह पहचान तुलना (identity comparison) बन जाता है। इसलिए, यदि आप ऑब्जेक्ट की सही समानता तुलना करना चाहते हैं, तो आपको हमेशा equals() का उपयोग करना चाहिए।
hashCode()
hashCode() यह जांचता है कि क्या दो ऑब्जेक्ट समान ऑब्जेक्ट हैं। यह == के समान पहचान तुलना (identity comparison) कार्य करता है, लेकिन hashCode() विधि रनटाइम के दौरान ऑब्जेक्ट के अद्वितीय पूर्णांक मान को देता है। आमतौर पर, यह हीप (Heap) में संग्रहीत ऑब्जेक्ट के मेमोरी पते को देता है।
इस विधि में नेटिव (native) कीवर्ड लगाया गया है, और इसका मतलब है कि जब आप जावा के अलावा किसी अन्य भाषा में विकसित भाषा का उपयोग जावा में करते हैं तो इसका उपयोग किया जाता है।
हैश क्या है?
हैशिंग एक प्रक्रिया है जिसमें हैश फ़ंक्शन का उपयोग करके परिवर्तनशील आकार के इनपुट मान से निश्चित आकार का आउटपुट मान उत्पन्न होता है। हैशिंग द्वारा प्राप्त मान को हैश कोड कहा जाता है।
equals() और hashCode()
चूँकि समान ऑब्जेक्ट में समान मेमोरी पता होना चाहिए, इसलिए यह स्पष्ट है कि समान ऑब्जेक्ट में समान हैश कोड होना चाहिए। इसलिए, equals() के अलावा, hashCode() को भी ओवरराइड करना और कोड को समान हैश कोड प्रदान करने के लिए लिखना उचित है।
हैश डेटा संरचना
आइए HashSet डेटा संरचना में दो समान ऑब्जेक्ट डालते हैं, जैसा कि ऊपर दिखाया गया है। यदि आप सेट के आकार को आउटपुट करते हैं, तो यह 2 होगा। ऐसा क्यों है?
यह इसलिए है क्योंकि हैश का उपयोग करने वाली डेटा संरचना कुंजी निर्धारित करते समय hashCode() का उपयोग करती है। दूसरे शब्दों में, यह जांचने से पहले कि क्या ऑब्जेक्ट समान हैं, यह जांचता है कि क्या दो ऑब्जेक्ट के हैश कोड समान हैं, और फिर यह जांचता है कि क्या दो ऑब्जेक्ट समान हैं। इस समय, यदि hashCode() को ओवरराइड नहीं किया जाता है, तो Object का hashCode() उपयोग किया जाता है, इसलिए प्रत्येक ऑब्जेक्ट का संग्रहीत मेमोरी पता वापस कर दिया जाता है। इसलिए, हैश डेटा संरचना का उपयोग करते समय, equals() के अलावा hashCode() को भी ओवरराइड करना उचित है।
स्रोत
अपेक्षित साक्षात्कार प्रश्न और उत्तर
equals() और hashCode() का एक साथ उपयोग क्यों किया जाता है?
यह इसलिए है क्योंकि हैश का उपयोग करने वाली डेटा संरचना कुंजी निर्धारित करते समय hashCode() का उपयोग करती है। दूसरे शब्दों में, यह जांचने से पहले कि क्या ऑब्जेक्ट समान हैं, यह जांचता है कि क्या दो ऑब्जेक्ट के हैश कोड समान हैं, और फिर यह जांचता है कि क्या दो ऑब्जेक्ट समान हैं। इस समय, यदि hashCode() को ओवरराइड नहीं किया जाता है, तो Object का hashCode() उपयोग किया जाता है, इसलिए प्रत्येक ऑब्जेक्ट का संग्रहीत मेमोरी पता वापस कर दिया जाता है। इसलिए, हैश डेटा संरचना का उपयोग करते समय, equals() के अलावा hashCode() को भी ओवरराइड करना उचित है।
टिप्पणियाँ0