हैशकोड () विधि किसी वस्तु का हैशकोड उत्पन्न करती है, जो सटीक बकेट/इंडेक्स की पहचान करने में मदद करती है। मान लें कि इस बकेट (इंडेक्स) में पहले से ही कुछ कुंजी-मूल्य जोड़े मौजूद हैं, तो जो कुंजी डाली जाएगी उसकी तुलना सभी मौजूदा कुंजियों से की जानी चाहिए। यहाँ कुंजियों को खोजने के लिए किस एल्गोरिथम का उपयोग किया जा रहा है?

0
Ameet 24 जुलाई 2018, 15:16
खैर, कार्यान्वयन खुला स्रोत है, इसलिए स्रोत देखें, उदा। [ hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/…
 – 
Thomas Behr
24 जुलाई 2018, 15:19
लिंक काम नहीं करता है।
 – 
LOLWTFasdasd asdad
24 जुलाई 2018, 15:23
यह सिर्फ नोड वस्तुओं की तुलना करता है। यह पंक्ति: hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/…
 – 
Serġan
24 जुलाई 2018, 15:25
यह कोई एल्गोरिथम नहीं है, यह एक हुक है: key1.equals(key2)equals विधि प्रमुख वस्तुओं द्वारा स्वयं कार्यान्वित की जाती है।
 – 
user3458
24 जुलाई 2018, 15:54

2 जवाब

यह HashMap के प्रवेश सेट पर एक रैखिक खोज करेगा। यह आपके key (hash द्वारा) को देखकर प्रविष्टि सेट प्राप्त करेगा और फिर एक-एक करके प्रवेश सेट (आपके एकाधिक कुंजी-मूल्य जोड़े/जोड़ी) पर पुनरावृति करेगा और आपके लिए सही कुंजी की जांच करेगा।

यहाँ कार्यान्वयन है

public V get(Object key) {

    if (key == null)
        return getForNullKey();
    int hash = hash(key.hashCode());

    for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {
         Object k;
         if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
             return e.value;
         }
     }
     return null;
 }
1
Deb 24 जुलाई 2018, 15:29

अगर मुझे अपने शिक्षक को ठीक से याद है;

जैसा कि आप कहते हैं, Javas HashMap<K,V> hashcode (Object से विरासत में मिला है, और अधिमानतः आपकी कुंजी द्वारा ओवरराइड) का उपयोग करता है, यह पता लगाने के लिए कि अंतर्निहित संरचना में इसे आपकी कुंजी-मूल्य जोड़ी को कहाँ संग्रहीत करना चाहिए।

यदि एक ही स्थान पर कई <K,V> जोड़े मौजूद हैं, तो get(K k) पर कॉल करने से आपकी कुंजी boolean equals(Object o) विधि का उपयोग करके पता लगाया जा सकता है कि आपको कौन सी कुंजी चाहिए (यह भी Object द्वारा विरासत में मिली है) , या put पर कॉल करने पर उसी तकनीक का उपयोग करके यह पता लगाया जाएगा कि आपके नए मान को किस मान से बदला जाए।

हालांकि यह पहले संदर्भों की जांच करेगा। यदि आपकी कुंजी और हैसमैप में एक स्टोर समान है, तो यह equals का उपयोग करके जांच नहीं करेगा।

0
Robert 24 जुलाई 2018, 15:21