2012-12-10 27 views
5

हैशकोड प्रभावी जावा आइटम 9 (हमेशा hashCode ओवरराइड जब आप equals ओवरराइड) जहां यह इस तरह के स्ट्रिंग, पूर्णांक, और दिनांक के रूप में जावा मंच पुस्तकालयों, मेंजावा मंच पुस्तकालयों

कई कक्षाओं का कहना है, में शामिल उनके विनिर्देशों का सटीक मूल्य उनके हैशकोड विधि द्वारा आवृत्ति मान के फ़ंक्शन के रूप में लौटाया गया है। यह आम तौर पर एक अच्छा विचार नहीं है, क्योंकि भविष्य में रिलीज में हैश फ़ंक्शन को बेहतर बनाने के लिए यह आपकी क्षमता को गंभीर रूप से सीमित करता है।

इसका क्या अर्थ है?

+0

आप किस भाग को समझते नहीं हैं? – SLaks

+1

इसका मतलब है कि जावा स्रोत हमेशा अच्छी प्रोग्रामिंग शैली का मॉडल नहीं होते हैं। –

उत्तर

4

इसका मतलब है कि आप बेहतर कोडिंग गुणों के लिए अपने कोड के बाद के संस्करणों में हैश फ़ंक्शन को फिर से लिख नहीं सकते हैं। उदाहरण के लिए, String.hashCode() फ़ंक्शन तेज़ है ... लेकिन बहुत अच्छा नहीं है। लेकिन इसे अब और बदला नहीं जा सकता है, क्योंकि हैश कोड निर्दिष्ट किया गया था और लोगों ने उस कार्यान्वयन पर अपने कोड में निर्भर किया है।

+0

आपका क्या मतलब है, "क्योंकि हैश कोड निर्दिष्ट किया गया था और लोगों ने अपने स्वयं के कोड में उस कार्यान्वयन पर निर्भर किया है"? क्या ऐसा कोई ऐसा करता है: int हैश = string.hashCode() और फिर बाद में वे कुछ बेवकूफ (हैश == 12345) जैसे बेवकूफ करते हैं? – Hiro2k

+3

@ Hiro2k - एपीआई दस्तावेज़ निर्दिष्ट करते हैं कि 'स्ट्रिंग.hashCode() 'एक विशिष्ट सूत्र द्वारा गणना की जाती है। क्लाइंट कोड स्वतंत्र रूप से उस सटीक सूत्र का उपयोग करके हैश कोड की गणना करने के लिए स्वतंत्र है और मान लें कि यह 'स्ट्रिंग.hashCode() 'द्वारा लौटाए गए जैसा ही होगा। यह शुद्ध जावा कोड के लिए प्रतिकूल प्रतीत हो सकता है, लेकिन जेएनआई के साथ कुछ समझ में आता है। ऐसे कई अन्य मामले हैं जहां एपीआई निर्दिष्ट अतिरिक्त ज्ञान का लाभ उठाने के लिए समझ में आता है। –

+0

यह बहुत अधिक समझ में आता है। धन्यवाद टेड होप – Hiro2k