जावा में, मेरे पास Java3D कक्षा Point3f
का उप-वर्ग Vertex
है। अब Point3f
इसकी निर्देशांक के मानों के आधार पर equals()
की गणना करता है, लेकिन मेरे Vertex
कक्षा के लिए मैं कठोर होना चाहता हूं: दो शीर्ष केवल तभी समान होते हैं जब वे एक ही वस्तु हों। अब तक, तो अच्छा:ऑब्जेक्ट के पते से हैशकोड() की गणना कैसे करें?
class Vertex extends Point3f {
// ...
public boolean equals(Object other) {
return this == other;
}
}
मैं इस equals()
के अनुबंध का उल्लंघन करती है, लेकिन जब से मैं केवल एक अन्य कोने करने के लिए कोने की तुलना करेंगे यह एक समस्या नहीं है।
अब, HashMap
में शिखर डालने में सक्षम होने के लिए, hashCode()
विधि equals()
के साथ संगत परिणामों को वापस करनी होगी। यह वर्तमान में ऐसा करता है, लेकिन शायद Point3f
के क्षेत्रों में इसके वापसी मूल्य का आधार है, और इसलिए एक ही निर्देशांक के साथ विभिन्न Vertex
ऑब्जेक्ट्स के लिए हैश टकराव देगा।
इसलिए मैं Vertex
के फ़ील्ड से इसकी गणना करने के बजाय ऑब्जेक्ट के पते पर hashCode()
का आधार बनाना चाहता हूं। मुझे पता है कि Object
कक्षा यह करती है, लेकिन मैं इसे hashCode()
विधि नहीं कह सकता क्योंकि Point3f
इसे ओवरराइड करता है।
तो, वास्तव में मेरे सवाल दोहरा है:
- मैं भी इस तरह के एक उथले
equals()
चाहते चाहिए? - यदि हां, तो, हैश कोड की गणना करने के लिए मैं ऑब्जेक्ट का पता कैसे प्राप्त करूं?
संपादित करें: मैंने बस कुछ सोचा था ... मैं ऑब्जेक्ट सृजन पर एक यादृच्छिक int
मान उत्पन्न कर सकता हूं, और हैश कोड के लिए इसका उपयोग कर सकता हूं। क्या यह एक बेहतर तरकीब है? क्यों नहीं)?
असल में ... यह वही है जो मुझे चाहिए: डी – Thomas