समतुल्य हॅशकोड पद्धती दोन मूलभूत आहेत, परंतु जावा प्रोग्रामरसाठी सर्वात महत्वाच्या पद्धतींपैकी एक माहिती असणे आवश्यक आहे. क्लासच्या सामग्रीवर आधारित हॅश किंवा सारांश देण्यासाठी प्रत्येक वर्गासाठी समान हॅश कोड प्रदान करण्याचा जावाचा हेतू आहे. हॅश कोड वाढतो जेव्हा आम्ही वेगवेगळ्या असेंब्ली क्लासेसमध्ये एखादी वस्तू वापरतो जी हॅशिंग तत्त्वावर कार्य करते, उदा. hashtable և hashmap:. चांगली लिखित हॅशकोड पद्धत टक्कर टाळण्यासाठी ऑब्जेक्ट्सचे समान वितरण करून कार्यक्षमतेत सुधारणा करू शकते.

या लेखात आपण पाहू एका साध्या उदाहरणासह जावा मधील हॅशकोड () पद्धत योग्यरित्या कशी हटवायची.


आम्ही जावामध्ये हॅशकोड करारांच्या महत्त्वाच्या बाबींवर चर्चा करू. ही माझ्या मागील पोस्टची सुरूवात आहे
जावा मध्ये बरोबरीची पद्धत पसंत करत आहेजर तुम्ही ते अजून वाचले नसेल, तर मी तुम्हाला वगळा असे सुचवितो.

जावा मध्ये सामान्य हॅशकोड () करार

1) दोन वस्तू असल्यास समान समान () पद्धत, नंतर त्यांचे हॅश कोड: परत केलेला हॅशकोड () समान असणे आवश्यक आहे.

2) प्रत्येक वेळी हॅशकोड () पद्धत एकदा एकाच ऑब्जेक्टवर अनुप्रयोगास अनेक वेळा कॉल केल्यानंतर, समीकरणात वापरलेली माहिती किंवा फील्ड बदलल्याशिवाय हॅशकोड () समान पूर्णांक परत करणे आवश्यक आहे. एकाधिक अनुप्रयोग करत असल्यास हे पूर्णांक समान असणे आवश्यक नाही.

3) जर दोन वस्तू () पद्धतीने समान नसतील तर त्यांचा हॅश कोड वेगळा असण्याची गरज नाही. किंवा असमान ऑब्जेक्टसाठी वेगवेगळे हॅशकोड परत करणे नेहमीच चांगले असते. वैयक्तिक वस्तूंसाठी वेगवेगळे हॅशकोड टक्कर कमी करून हॅशमॅप किंवा हॅशटेबलचे कार्यप्रदर्शन सुधारू शकतात.

समान च्या “हॅश कोड” ची संकल्पना – जर तुम्ही त्यांना योग्यरित्या पास केले नाही तर काय होईल, मी तुम्हाला समजून घेण्याचा सल्ला देतो जावामध्ये हॅशमॅप कसे कार्य करते

जावा मध्ये उत्कृष्ट हॅशकोड पद्धत

आम्ही चरण-दर-चरण दृष्टिकोन घेऊ प्रमुख हॅशकोड पद्धत. हे आपल्याला संकल्पना -प्रक्रिया अधिक चांगल्या प्रकारे समजून घेण्यास अनुमती देईल.

1) मुख्य हॅश घ्या, उदाहरणार्थ 5, 7, 17 किंवा 31 (हॅश म्हणून एक प्रमुख संख्या एखाद्या विशिष्ट वस्तूसाठी स्पष्ट हॅश कोड बनवते)

2) हॅश चांगला आहे त्यापेक्षा गुणक वेगळा असल्याने दुसरा प्राइम घ्या.

3) प्रत्येक सदस्यासाठी हॅश कोडची गणना करा – त्यांना अंतिम हॅशमध्ये जोडा. समान म्हणून सहभागी झालेल्या सर्व सदस्यांसाठी पुनरावृत्ती करा.

4) परतावा खाते

हॅशकोड () पद्धतीचे उदाहरण येथे आहे

– ओव्हरराइड:

सार्वजनिक इंट हॅशकोड () {

इंट हॅश = 5;

hash = 89 hash + (this.name! = null? this.name.hashCode (): 0);

hash = 89 account + (int) (this.id ^ (this.id >>> 32));

खाते = 89 खाते + हे. वय;

परतावा खाते;

}

असे करणे नेहमीच चांगले असते हॅशकोड () वर कॉल करण्यापूर्वी शून्य तपासा सदस्याला शून्य रिटर्न असल्यास NullPointerException टाळण्यासाठी सदस्य किंवा फील्डवरील पद्धत. वेगवेगळ्या प्रकारच्या डेटामध्ये हॅशकोडची गणना करण्याचे वेगवेगळे मार्ग आहेत. पूर्णांक सदस्य सर्वात सोपा आहेत, आम्ही फक्त तिथे खात्यात मूल्य जोडतो, कारण इतर प्रकारच्या डिजिटल डेटाचे रूपांतर int मध्ये केले जाते आणि नंतर हॅशमध्ये जोडले जाते. ओश ओशूआ ब्लूजवर यावर पूर्ण टेबल्स आहेत. म्हणूनच मी मुख्यतः IDE वर अवलंबून राहिलो.

समवयस्क दुर्लक्ष करण्याचा एक चांगला मार्ग և हॅशकोड

उदाहरणार्थ हॅशकोड जावामला वाटते की हा एक चांगला मार्ग आहे समान և हॅश कोड पद्धतींकडे दुर्लक्ष करा IDE वर सोडले पाहिजे. मी नेटबीन्स և एक्लिप्स seen पाहिले आहे की दोघांनाही उत्तम पिढीचा पाठिंबा आहे समान և हॅशकोडसाठी कोड և त्यांची अंमलबजावणी वरवर पाहता सर्व उत्तम पद्धतींचे पालन करते և अवैध पडताळणी, पडताळणी उदाहरण इत्यादी आवश्यकता և हे तुम्हाला विविध डेटा प्रकारांच्या हॅश कोडची गणना कशी करायची हे लक्षात ठेवण्यास मोकळे करते.

चला नेटबीन्स և एक्लिप्समध्ये हॅशकोड पद्धतीकडे कसे दुर्लक्ष करू शकतो ते पाहू.

नेटबीन्स मध्ये

1) तुमचा धडा लिहा.

2) उजवे क्लिक करा + कोड घाला + समीकरणे तयार करा () և हॅशकोड ():

जावा हॅशकोड कसे वगळावे




ग्रहण मध्ये

1) तुमच्या वर्गात लिहा.

2) स्त्रोत मेनूवर जा + हॅशकोड तयार करा () և समान ()

जावामध्ये हॅशकोडला प्राधान्य देताना लक्षात ठेवा

1. प्रत्येक वेळी तुम्ही समान पद्धतीकडे दुर्लक्ष करता, हॅश कोडला समान हॅश कोड कराराच्या समान बनवण्यासाठी दुर्लक्ष केले पाहिजे.

2. hashCode () ऑब्जेक्ट क्लास declared मध्ये घोषित केले आहे हॅशकोड पद्धतीचा परतावा प्रकार int आहे long लांब नाही.

3. एका निश्चित ऑब्जेक्टसाठी, सुधारित कामगिरीसाठी एकदा तयार केलेला हॅशकोड तुम्ही कॅश करू शकता.

4. हॅशकोड समतुल्यतेसाठी आपल्या हॅशकोड पद्धतीची चाचणी घ्या.

5. जर तुम्ही: हे करू नकोस हॅशकोड () पद्धत ओव्हरराइड करा हॅशमॅप, हॅशटेबल किंवा हॅशसेट सारख्या हॅश-आधारित संकलनावर तुमची ऑब्जेक्ट योग्यरित्या कार्य करू शकत नाही.

समीकरणांचे पूर्ण उदाहरण և हॅशकोड

सार्वजनिक: श्रेणी: शेअर करा {

खाजगी: स्ट्रिंग: चिन्ह:;

खाजगी: स्ट्रिंग: देवाणघेवाण;

खाजगी: लांब खूप आकार:;

खाजगी: s: टिक आकार:;

खाजगी: बुलियन मर्यादित आहे;

खाजगी: तारीख: सेटलमेंट दिवस;

खाजगी: बिग दशांश: खर्च;

– ओव्हरराइड:

सार्वजनिक: s: हॅशकोड () {

अंतिम: s: पंतप्रधान = 31;

s: परिणाम = 1;

परिणाम = पंतप्रधान * निकाल

+ ((देवाणघेवाण ==: रिक्त) 0: देवाणघेवाण.hashCode ());

परिणाम = प्राइम * परिणाम + (मर्यादित आहे ? 1231: 1237);

परिणाम = प्राइम * परिणाम + (s:) (खूप आकार: (खूप आकार: >>> 32));

परिणाम = प्राइम * परिणाम + ((खर्च ==: रिक्त) 0: खर्च.hashCode ());

परिणाम = पंतप्रधान * निकाल

+ ((सेटलमेंट दिवस ==: रिक्त) 0: सेटलमेंट दिवस.hashCode ());

परिणाम = प्राइम * परिणाम + ((चिन्ह: ==: रिक्त) 0: चिन्ह:.hashCode ());

परिणाम = पंतप्रधान * परिणाम + टिक आकार:;

परत परिणाम;

}

– ओव्हरराइड:

सार्वजनिक: बुलियन समान आहे (ऑब्जेक्ट ऑब्जेक्ट) {

तर: (हे: == obj) परत ते बरोबर आहे;

तर: (obj ==: रिक्त ||: हे:.getClass ()! = obj.getClass ()) {

परत बनावट;

}

स्टॉक इतर = (वेअरहाऊस) obj;

परत

हे:.टिक आकार: == इतर:टिक आकार: && हे:.खूप आकार: == इतर:खूप आकार: &&

हे:.मर्यादित आहे == इतर:मर्यादित आहे &&

(हे:.चिन्ह: == इतर:चिन्ह:||: (हे:.चिन्ह: ! = =: रिक्त && हे:.चिन्ह:.equal (इतरचिन्ह:))) आणि

(हे:.देवाणघेवाण == इतर:देवाणघेवाण||: (हे:.देवाणघेवाण ! = =: रिक्त && हे:.देवाणघेवाण.equal (इतरदेवाणघेवाण))) आणि

(हे:.सेटलमेंट दिवस == इतर:सेटलमेंट दिवस||: (हे:.सेटलमेंट दिवस ! = =: रिक्त && हे:.सेटलमेंट दिवस.equal (इतरसेटलमेंट दिवस))) आणि

(हे:.खर्च == इतर:खर्च||: (हे:.खर्च ! = =: रिक्त && हे:.खर्च.equal (इतरखर्च)));

}

}

अपाचे कॉमन्स EqualsBuilder և HashCodeBuilder वापरून समान և हॅश कोड लिहा

EqualsBuilder և HashCodeBuilder हा अपाचे कॉमन्स पेक्षा समीकरणे पूर्ववत करण्याचा एक चांगला मार्ग आहे – हॅशकोड पद्धत, ग्रहणाने निर्माण केलेल्या हॅशकोडपेक्षा कमीत कमी चांगली. मी हॅशकोडबिल्डर և EqualsBuilder using वापरून तेच उदाहरण लिहिले և आता तुम्ही पाहू शकता की ते किती सोपे आहेत.

– ओव्हरराइड:

सार्वजनिक बुलियन समान आहे(ऑब्जेक्ट ऑब्जेक्ट) {

जर (शेअर्सचा विषय) {

स्टॉक इतर = (वेअरहाऊस) obj;

EqualsBuilder बिल्डर = नवीन: EqualsBuilder:();

builder.append (this.symbol, other.symbol);

builder.append (this.exchange, other.exchange);

builder.append (this.lotSize, other.lotSize);

builder.append (this.tickSize, other.tickSize);

builder.append (this.isRestricted, other.isRestricted);

builder.append (this.settlementDate, other.settlementDate);

builder.append (this.price, other.price);

परतावा builder.isEquals ();

}

बनावट परत करा;

}

– ओव्हरराइड:

सार्वजनिक int हॅशकोड:() {

हॅशकोडबिल्डर बिल्डर = नवीन हॅशकोड बिल्डर:();

builder.append (चिन्ह);

builder.append (विनिमय);

builder.append (lotSize);

builder.append (tickSize);

builder.append (isRestricted);

builder.append (कॉन्फिगरेशन तारीख);

builder.append (किंमत);

return builder.toHashCode ();

}

सार्वजनिक स्थिर रिक्त कोर (स्ट्रिंग आर्गे:[]) {

स्टॉक सोनी = नवीन फंड (“6758.T”, “Tkyo स्टॉक एक्सचेंज”, 1000, 10, खोटे, नवीन तारीख (), BigDecimal.valueOf (2200));

स्टॉक sony2 = नवीन स्टॉक (“6758.T”, “टोकियो स्टॉक एक्सचेंज”, 1000, 10, बनावट, नवीन तारीख (), BigDecimal.valueOf (2200));

System.out.println (“समान परिणाम.” + सोनी.समान आहे(सोनी 2));

System.out.println (“हॅशकोड आउटपुट.” + (सोनी.हॅशकोड:() == sony2.हॅशकोड:()));

}

फक्त एक चिंता ही आहे की ती अपाचे-कॉमन्स बँकेवर अवलंबून आहे, बहुतेक लोक ते वापरतात, परंतु जर तुम्ही ते वापरत नसाल, तर तुम्हाला हे लिहिण्यासाठी हॅशकोड समीकरणात समाविष्ट करावे लागेल.

संबंधित जावा शिकवण्या: