आइटम 9 प्रभावी जावा के, 2 edn के आखिरी पैरा, जे बलोच का कहना है कि, Integer
की तरह मूल्य कक्षाएं, String
, Date
आदि के लिए, इस बात का सही मूल्य के एक समारोह लौटने hashCode
के रूप में वर्ग एक अच्छा विचार नहीं है।वैल्यू क्लास का मूल्य हैश कोड के रूप में "अच्छा विचार नहीं" क्यों है?
तो, वर्ग Integer
पूर्णांक के value
लौटने पर यह hashCode
के उदाहरण के रूप में प्रतिनिधित्व करता है, यह सब इतना अच्छा नहीं है।
न तो String
की hashCode()
सीधे समग्र सामग्री से मैप किया गया मान एक पूर्णांक लौटने है, जैसे कि, वर्ण String
उदाहरण है।
ये hashCode()
-स्पष्ट रूप से अनुबंध का अनुपालन करते हैं।
मेरे लिए, यह एक बुरे के बजाय एक अच्छा विचार प्रतीत होता है - hashCode
-भिन्नता के रूप में भिन्नता भिन्न होती है, और hashCodes
वे "सामान्यीकृत" हैं, इससे पहले कि वे बाल्टी में फैल जाएं HashMap
/HashSet
- ताकि प्रविष्टियों की hashCode
-s एक पूर्वाग्रह है जिस पर प्रविष्टि में जाना होगा बाल्टी फार्म नहीं है
क्या मैं यहाँ याद आ रही है -। क्या hashCode
एक "बुरा करने के लिए सीधे वर्ग मूल्य मानचित्रण बनाता है विचार"?
TIA
// ===========================
संपादित
कृपया यह भी देखना इस संबंध में स्टीव सिबर्ट के जवाब के तहत टिप्पणियां।
उस से सहमत हैं। लेकिन इसका समाधान एक सिद्धांत को मजबूर करना चाहिए कि "' हैशकोड 'को' मान' 'के संकेतक/कार्यात्मक विकल्प के रूप में उपयोग नहीं किया जाना चाहिए, बल्कि ' मूल्य 'और 'हैशकोड के बीच उस अच्छे रिश्ते के बीच में होने के बजाय() 'और इस प्रकार' बराबर() 'और' हैशकोड() 'के बीच। – Roam
मैं पूरी तरह से आपसे सहमत हूं, एक हैशकोड अभ्यास में एक ऐसे व्यक्ति के रूप में माना जा सकता है जो ऑब्जेक्ट के वास्तविक मूल्य के "कम बुद्धिमान/हानिकारक" प्रतिनिधित्व को लौटाता है - जन्मदिन के विरोधाभास के लिए अतिसंवेदनशील। लेकिन, वास्तव में, एक हैश आवश्यक नहीं है * मूल्य * के साथ relationhsip है ... हैशकोड हमेशा एक ही वस्तु के लिए एक ही int मान वापस करने की जरूरत है (हालांकि यह आपके द्वारा परिभाषित किया गया है) तो वस्तु में पाया जा सकता है अपेक्षित बाल्टी आम तौर पर यह वस्तु के एक/अधिक मूल्यों को हैशिंग करके किया जाता है ... जो समझ में आता है। लेकिन, अगर यह किया जा सकता है, तो कहें ... जादू ... तो मैं न्याय करने के लिए कौन हूं? =) –
'हैशकोड' से 'मान' को चिपकाने की संभावना है" अगर दो ऑब्जेक्ट्स बराबर नहीं हैं, न तो उनके हैशकोड हैं "और हैश बाल्टी में समान रूप से वितरित प्रविष्टियों के लिए यह अच्छी बात है - हालांकि यह नहीं है अनुबंध द्वारा एक आवश्यकता है। मैंने न तो देखा और न ही ऐसा करने का बेहतर तरीका सोच सकता हूं। – Roam