मैं निम्नलिखित यहोशू बलोच (आइटम 9, अध्याय 3, पेज 49)प्रभावी जावा में जोशुआ ब्लोच द्वारा सुझाए गए अनुसार जावा में कैशिंग हैशकोड कैसे काम करता है?
एक वर्ग अपरिवर्तनीय है और हैश कोड कंप्यूटिंग की लागत महत्वपूर्ण है, तो आप शायद द्वारा प्रभावी जावा से कोड का टुकड़ा प्रत्येक बार अनुरोध किए जाने पर इसे पुन: गणना करने के बजाय ऑब्जेक्ट में हैश कोड को कैश करने पर विचार करें। यदि आप पर विश्वास करते हैं कि इस प्रकार की अधिकांश ऑब्जेक्ट्स हैश कुंजी के रूप में उपयोग की जाएंगी, तो उदाहरण के दौरान को हैश कोड की गणना करनी चाहिए। अन्यथा, आप आलसी को पहली बार शुरू करना चुन सकते हैं हैशकोड का आह्वान किया गया है (आइटम 71)। यह स्पष्ट नहीं है कि हमारे PhoneNumber वर्ग गुण इस इलाज है, लेकिन केवल आपके दिखाने के लिए कि यह कैसे हुआ:
// Lazily initialized, cached hashCode
private volatile int hashCode; // (See Item 71)
@Override public int hashCode() {
int result = hashCode;
if (result == 0) {
result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
hashCode = result;
}
return result;
}
मेरे सवाल का कैसे कैशिंग (hashCode याद) यहाँ काम करता है। पहली बार, hashCode()
विधि कहा जाता है, परिणाम देने के लिए hashCode
नहीं है। यह कैशिंग काम कैसे काम करेगा इस पर एक संक्षिप्त विवरण होगा। धन्यवाद
कैशिंग का मतलब आपके द्वारा गणना की गई मान को सहेजने का अर्थ है ताकि आप इसे फिर से गणना किए बिना पुनः उपयोग कर सकें। यह सब कुछ कर रहा है। –
एह? कैश "निजी अस्थिर int हैशकोड" है। जब हैश की गणना की जाती है, तो यह कैश में सहेजी जाती है। प्रारंभ में मान 0 गैर-स्थानीय संख्यात्मक चर के रूप में 0 है। – Kayaman