मेरे पास TreeSet
संग्रह और hashCode
विधियों के बारे में एक त्वरित प्रश्न है। मेरे पास TreeSet
है और मैं ऑब्जेक्ट जोड़ने से पहले ऑब्जेक्ट्स जोड़ रहा हूं, मैं यह देखने के लिए जांच करता हूं कि यह में contains
विधि का उपयोग कर मौजूद है या नहीं।जावा - ट्रीसेट और हैशकोड()
2 अलग वस्तुओं, जिनमें से प्रत्येक एक अलग hashCode hashCode विधि के अपने कार्यान्वयन का उपयोग, नीचे दिए गए उदाहरण का उत्पादन किया है:
public int hashCode()
{
int hash = 7;
hash = hash * 31 + anAttribute.hashCode();
hash = hash * 31 + anotherAttribute.hashCode();
hash = hash * 31 + yetAnotherAttribute.hashCode();
return hash;
}
एक विशेष रन के लिए hashCodes हैं: केवल 76,126,352 और 76,126,353 (वस्तुओं एक विशेषता में एक अंक से भिन्न)।
हैशकोड अलग-अलग हैं, भले ही इन ऑब्जेक्ट्स के लिए विधि सही हो रही है। कोई विचार क्यों? यह वास्तव में भ्रमित है और वास्तव में सराहना की जाएगी।
यह बराबर विधि का भी उपयोग करता है, इसलिए यह महत्वपूर्ण है कि बराबर और तुलनात्मक/तुलना करने के लिए सुसंगत रहे। –
javadocs के अनुसार यह नहीं है। – sepp2k
"ऐसा इसलिए है क्योंकि सेट इंटरफ़ेस को बराबर ऑपरेशन के संदर्भ में परिभाषित किया गया है, लेकिन एक ट्रीसेट उदाहरण इसकी तुलना का उपयोग करके सभी तत्व तुलना करता है (या तुलना करें) विधि ..." (http://java.sun.com/ से) JavaSE/6/docs/api/जावा/util/TreeSet।एचटीएमएल) – Dirk