में मिलाकर मेरे पास हैशकोड() लागू एक वेक्टर क्लास है। यह मेरे द्वारा नहीं लिखा गया था, लेकिन 2 प्रमुख संख्याओं का उपयोग करता है जिसके द्वारा उन्हें XORing से पहले 2 वेक्टर घटकों को गुणा करना है। यहां यह है:जावा हैशकोड को "मास्टर" हैशकोड
/*class Vector2f*/
...
public int hashCode()
{
return 997 * ((int)x)^991 * ((int)y); //large primes!
}
... चूंकि यह एक स्थापित जावा लाइब्रेरी से है, मुझे पता है कि यह ठीक काम करता है।
तब मेरे पास एक सीमा वर्ग है, जिसमें 2 वैक्टर, "प्रारंभ" और "अंत" (रेखा के अंत बिंदुओं का प्रतिनिधित्व) होता है। इन 2 वैक्टरों के मूल्य सीमा को दर्शाते हैं।
/*class Boundary*/
...
public int hashCode()
{
return 1013 * (start.hashCode())^1009 * (end.hashCode());
}
यहाँ मैं वैक्टर की अद्वितीय 2-टपल के लिए एक अच्छा hashCode() बनाने (& अंत शुरू) इस सीमा का गठन करने का प्रयास किया है। मेरा सवाल: क्या यह हैशकोड() कार्यान्वयन काम करने जा रहा है?
(ध्यान दें कि मैंने बाद वाले हैशकोड() कार्यान्वयन में 2 अलग-अलग प्राइम नंबरों का उपयोग किया है; मुझे नहीं पता कि यह आवश्यक है, लेकिन सामान्य कारकों से बचने की कोशिश करते समय खेद से सुरक्षित होना बेहतर है, मुझे लगता है - चूंकि मुझे लगता है कि यही कारण है कि हैशिंग फ़ंक्शन के लिए प्रिम्स लोकप्रिय हैं।)
धन्यवाद समीर, मुझे नहीं पता था कि ग्रहण में यह था। –