जॉन स्कीट उत्तर एक कुशल तरीके से दो परिदृश्यों ( null
मूल्य के साथ नक्शा और मूल्य नहीं null
) को अच्छी तरह से संबोधित करता है ।
संख्या प्रविष्टियों और दक्षता की चिंता के बारे में, मैं कुछ जोड़ना चाहूंगा।
मेरे पास 1.000 प्रविष्टियों के साथ एक हैशपॉप है और मैं दक्षता में सुधार देख रहा हूं। यदि हाशपैप को बहुत बार एक्सेस किया जा रहा है, तो हर एक्सेस पर प्रमुख अस्तित्व की जांच करने से एक बड़ा ओवरहेड हो जाएगा।
1.000 प्रविष्टियों वाला मानचित्र एक विशाल मानचित्र नहीं है।
साथ ही 5.000 या 10.000 प्रविष्टियों के साथ एक नक्शा।
Map
ऐसे आयामों के साथ तेजी से पुनर्प्राप्ति बनाने के लिए डिज़ाइन किए गए हैं।
अब, यह मान लेता है कि hashCode()
मानचित्र कुंजियाँ एक अच्छा वितरण प्रदान करती हैं।
यदि आप एक Integer
कुंजी प्रकार के रूप में उपयोग कर सकते हैं , तो करें।
इसकी hashCode()
विधि बहुत कुशल है क्योंकि अद्वितीय int
मानों के लिए टकराव संभव नहीं है :
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
यदि कुंजी के लिए, आपको एक और अंतर्निहित प्रकार का उपयोग करना होगा String
, उदाहरण के लिए जो अक्सर उपयोग किया जाता है Map
, तो आपके पास कुछ टकराव हो सकते हैं, लेकिन 1 हजार से लेकर कुछ हजारों वस्तुओं में Map
, आपके पास इसके कुछ बहुत कम होने चाहिएString.hashCode()
विधि के एक अच्छा वितरण प्रदान करता है।
यदि आप एक कस्टम प्रकार का उपयोग करते हैं, तो ओवरराइड करें hashCode()
और equals()
सही ढंग से और समग्र रूप से सुनिश्चित करें कि hashCode()
उचित वितरण प्रदान करता है।
आप इसे संदर्भित करने के लिए आइटम 9 का Java Effective
संदर्भ ले सकते हैं।
यहाँ एक पोस्ट है कि जिस तरह से विवरण है।