ऑब्जेक्ट का डिफ़ॉल्ट हैशकोड() वस्तु के लिए स्मृति पता देता है। तो अगर आप निम्नलिखित वर्ग है:
class Car {
String make;
String model;
int year;
public Car(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
}
तो दो वस्तुओं को बनाने:
Car car1 = new Car("Toyota", "Corolla", 2010);
Car car2 = new Car("Toyota", "Corolla", 2010);
car1.hashCode() car2.hashCode() से अलग होगा क्योंकि प्रत्येक वस्तु एक अलग स्मृति पता होगा ।
क्या होगा यदि आप कार 1 और कार 2 दोनों को एक ही हैश कोड वापस करने के लिए चाहते हैं? इस मामले में, आप के रूप में इस कार वर्ग के लिए डिफ़ॉल्ट वस्तु hashCode() विधि ओवरराइड करना चाहिए:
@Override
public int hashCode() {
Object[] x = {model, make, Integer.valueOf(year)};
int hashArray = Arrays.hashCode(x);
return hashArray;
}
यह car1.hashCode() car2.hashCode() क्योंकि String.hashCode के बराबर कर देगा() स्ट्रिंग सामग्री के आधार पर हैशकोड की गणना करता है, और Integer.hashCode() पूर्णांक मान को वापस कर देगा।
जावा 7 में, आप केवल ऑब्जेक्ट्स.hash (ऑब्जेक्ट ... मान) का उपयोग कर सकते हैं।
@Override
public int hashCode() {
return Objects.hash(model, make, year);
}
Objects.hash (वस्तु ... मान) आप के लिए Arrays.hashCode फोन करेगा: तो हमारी नई कार hashCode() के रूप में दिखेगा।
अंत में, ऑब्जेक्ट्स हैशकोड (ऑब्जेक्ट ओ) एक शून्य जांच करेगा। ऑब्जेक्ट शून्य होने पर यह 0 वापस आ जाएगा। अन्यथा, यह ऑब्जेक्ट हैशकोड() विधि को कॉल करेगा।
किस स्थिति में 'हैश (ओ) 'और' हैशकोड (ओ) 'वही मूल्य वापस नहीं करेगा? 'हैश()' राज्य 'के लिए दस्तावेज़ चेतावनी: जब एक ऑब्जेक्ट संदर्भ प्रदान किया जाता है, तो लौटाया गया मान उस ऑब्जेक्ट संदर्भ के हैश कोड के बराबर नहीं होता है।', लेकिन मैं अभी भी यह पता लगाने के लिए खुदाई कर रहा हूं कि क्यों। –