2011-11-02 6 views
57

हम हमेशा हैश मैप का उपयोग क्यों नहीं कर सकते हैं, भले ही यह ऐरेलिस्ट या लिंक्डलिस्ट में जोड़ने से अधिक कुशल है, ऑपरेशन हटाएं, भले ही संख्या की संख्या चाहे अवयव।लिंक्डलिस्ट या ऐरेलिस्ट पर हैश मैप का उपयोग कब करें और इसके विपरीत

मैंने इसे गुमराह किया और कुछ कारण मिले, लेकिन हैश मैप का उपयोग करने के लिए हमेशा कामकाज था, फायदे अभी भी जिंदा हैं।

+11

'Lists' और' Maps' दो * पूरी तरह से * अलग डेटा संरचनाओं, विभिन्न कार्यों और अपरिवर्तनशीलताओं के साथ हैं। क्या आप उन संदर्भ/आवश्यकताओं को समझा सकते हैं जिनके बारे में आप सोच रहे हैं कि दोनों स्वीकार्य समाधान होंगे? –

+3

स्पष्ट रूप से आपको किसी विशेष क्रम में * चीजों का एक सेट रखने की आवश्यकता नहीं है * ... –

+39

डाउनवोट, क्यों? मुझे लगता है कि यह एक उचित सवाल है। यद्यपि ज्ञान की कमी दिखाता है, लेकिन ज्ञान की कमी दिखाने के लिए SO सवाल पर डाउनवॉट नहीं किया जाना चाहिए। वास्तव में एक प्रश्न हमेशा ज्ञान की कमी का परिणाम होता है। –

उत्तर

78

सूचियां तत्वों के अनुक्रमिक क्रम का प्रतिनिधित्व करती हैं। मानचित्र का उपयोग कुंजी/मूल्य जोड़े के संग्रह का प्रतिनिधित्व करने के लिए किया जाता है।

जबकि आप एक सूची के रूप में मानचित्र का उपयोग कर सकते हैं, ऐसा करने के कुछ निश्चित डाउनसाइड्स हैं।

आदेश बनाए रखना: - परिभाषा द्वारा एक सूची का आदेश दिया गया है। आप आइटम जोड़ते हैं और फिर आप आइटम को सम्मिलित करने के क्रम में सूची के माध्यम से पुन: सक्रिय करने में सक्षम होते हैं। जब आप हैश मैप में आइटम जोड़ते हैं, तो आपको उन ऑर्डर को पुनर्प्राप्त करने की गारंटी नहीं दी जाती है, जिन्हें आप उन्हें डालते हैं। हैश मैप के उप-वर्ग हैं जैसे लिंकड हैशैप जो आदेश बनाए रखेंगे, लेकिन सामान्य क्रम में मानचित्र के साथ गारंटी नहीं है।

की/मान अर्थ विज्ञान: - एक मानचित्र के प्रयोजन के लिए एक महत्वपूर्ण है कि बाद में किसी समय आइटम को पुन: प्राप्त करने के लिए इस्तेमाल किया जा सकता है के आधार पर आइटम स्टोर करने के लिए है। समान कार्यक्षमता केवल सीमित मामले में एक सूची के साथ हासिल की जा सकती है जहां कुंजी सूची में स्थिति होती है।

कोड पठनीयता निम्नलिखित उदाहरणों पर विचार करें।

// Adding to a List 
    list.add(myObject);   // adds to the end of the list 
    map.put(myKey, myObject); // sure, you can do this, but what is myKey? 
    map.put("1", myObject);  // you could use the position as a key but why? 

    // Iterating through the items 
    for (Object o : myList)   // nice and easy 
    for (Object o : myMap.values()) // more code and the order is not guaranteed 

संग्रह कार्यक्षमता कुछ बड़ी उपयोगिता कार्यों संग्रह वर्ग के माध्यम से सूचियों के लिए उपलब्ध हैं। उदाहरण के लिए ...

// Randomize the list 
    Collections.shuffle(myList); 

    // Sort the list 
    Collections.sort(myList, myComparator); 

आशा इस मदद करता है,

+0

प्रदर्शन समस्याओं के कारण अक्सर लिंक्डलिस्ट को खराब कहा जाता है।तत्व ऑर्डरिंग के कारण मैं अक्सर ऐरेलिस्ट पर लिंक्डलिस्ट का उपयोग करता हूं। क्या यह बेहतर होगा (प्रदर्शन और स्मृति के लिए) यदि मैंने हैश मैप्स को चाबियों के रूप में पदों के साथ उपयोग किया? – Seza

28

सूचियां और मानचित्र विभिन्न डेटा संरचनाएं हैं। मानचित्र का उपयोग तब किया जाता है जब आप किसी कुंजी को मूल्य के साथ जोड़ना चाहते हैं और सूचियां ऑर्डर किए गए संग्रह हैं।

मानचित्र जावा संग्रह फ्रेमवर्क में एक इंटरफ़ेस है और हैश मैप मानचित्र इंटरफ़ेस का एक कार्यान्वयन है। हैश मैप एक कुंजी के आधार पर एक मान का पता लगाने और कुंजी के आधार पर मूल्यों को हटाने और हटाने के लिए कुशल हैं। हैश मैप की प्रविष्टियों का आदेश नहीं दिया जाता है।

ऐरेलिस्ट और लिंक्डलिस्ट सूची इंटरफ़ेस का कार्यान्वयन है। लिंक्डलिस्ट अनुक्रमिक पहुंच प्रदान करता है और सूची में तत्वों को सम्मिलित करने और हटाने में आम तौर पर अधिक कुशल होता है, हालांकि, सूची में तत्वों तक पहुंचने में यह कम कुशल होता है। ArrayList यादृच्छिक पहुंच प्रदान करता है और तत्वों तक पहुंचने में अधिक कुशल है लेकिन आम तौर पर तत्वों को सम्मिलित करने और हटाने पर धीमा होता है।

संबंधित मुद्दे