जैसा कि हम जावा संग्रह में जानते हैं, डेटा रखने के लिए सबसे महत्वपूर्ण डेटा संरचना में से एक है। संग्रह में कई कार्यान्वयन होते हैं जैसे कि मानचित्र, सेट सूची आदि। जिसने इसे डेटा संग्रहण के लिए सबसे योग्य बना दिया और तदनुसार इसे हेरफेर किया क्योंकि इन कार्यान्वयनों ने न केवल डेटा संग्रहण को प्रभावी बनाया बल्कि डेटा को बहु-थ्रेडिंग वातावरण में संभालने की अनुमति भी दी।
संग्रह के अन्य सभी कार्यान्वयनों में हैश मैप महत्वपूर्ण संग्रहों में से एक है जो डेटा को कुंजी मूल्य जोड़ी में संग्रहीत करता है। मल्टी-थ्रेडिंग के संदर्भ में, समवर्ती संग्रह के रूप में ज्ञात संग्रह का एक और कार्यान्वयन है जो हैश मैप के गुणों के साथ-साथ मल्टी-थ्रेडिंग वातावरण में डेटा को संभालने की भी अनुमति देता है।
इन दोनों संग्रहों के आंतरिक कार्यान्वयन के आधार पर निम्नलिखित महत्वपूर्ण अंतर हैं।
Sr. नहीं. | कुंजी | HashMap | <वें शैली="पाठ्य-संरेखण:केंद्र;">ConcurrentHashMap|
---|---|---|---|
1 | Concurrency | जैसा कि ऊपर उल्लेख किया गया है, इस संग्रह के दोनों के बीच मुख्य अंतर समवर्ती है, हैश मैप कोई थ्रेड सुरक्षित नहीं है। | दूसरी ओर ConcurrentHashMap थ्रेड सुरक्षित है और बहु-थ्रेडेड वातावरण में उपयोग के लिए उपयुक्त है। |
2 | कार्यान्वयन | Hashmap और ConcurrentHashmap को आंतरिक रूप से अलग-अलग तरीके से लागू किया जाता है क्योंकि हैशमैप में अवधारणा नहीं होती है यदि इसके स्टोरेज मैकेनिज्म में सेगमेंट और डेटा को की वैल्यू पेयर में स्टोर करता है। | दूसरी ओर Concurerent HashMap का कार्यान्वयन इस तरह से कि समवर्तीHashMap प्रारंभ होने पर खंडों की संख्या [डिफ़ॉल्ट 16] में विभाजित हो। ConcurrentHashMap इन खंडों को समवर्ती रूप से एक्सेस करने के लिए समान संख्या (16) थ्रेड्स की अनुमति देता है ताकि प्रत्येक थ्रेड उच्च संगामिति के दौरान एक विशिष्ट सेगमेंट पर काम करे। |
3 | पेश किया गया | HashMap JDK 1.2 में पेश किया गया है | दूसरी ओर ConcurrentHashMap सन माइक्रोसिस्टम द्वारा JDK 1.5 में पेश किया गया है। |
4 | अशक्त अनुमति | जैसा कि ऊपर बताया गया है, HashMap के मामले में कुंजी और मानों के लिए शून्य मानों की अनुमति है। | दूसरी ओर समवर्ती हैश मैप में न तो कुंजी के लिए और न ही मूल्य के लिए शून्य मान की अनुमति नहीं है और यदि ऐसी प्रविष्टि के लिए प्रयास किया जाता है तो NullPointerException कह कर रन-टाइम अपवाद प्राप्त करें। |
5 | सिंक्रनाइज़ेशन | HashMap समवर्ती HashMap से बेहतर है क्योंकि कोई सिंक्रनाइज़ेशन नहीं है। | दूसरी ओर ConcurrentHashMap, पूरे मानचित्र को समवर्ती स्तर के आधार पर अलग-अलग विभाजन में विभाजित करके और संपूर्ण मानचित्र को लॉक करने के बजाय केवल विशेष भाग को लॉक करके थ्रेड-सुरक्षा प्राप्त की जाती है। |
6 | प्रदर्शन | हम हैशमैप को Collections.synchornizedMap(HashMap) पर लपेटकर सिंक्रनाइज़ कर सकते हैं जो एक संग्रह लौटाएगा जो हैशटेबल के लगभग बराबर है, जहां मानचित्र पर प्रत्येक संशोधन ऑपरेशन मानचित्र ऑब्जेक्ट पर लॉक है। | जैसा कि ऊपर बताया गया है, Collections.SynchronizedMap() विधि का उपयोग करने की आवश्यकता है तो ConcurrentHashMap() एक बेहतर विकल्प है क्योंकि ConcurrentHashMap अभी भी एक से अधिक थ्रेड को मानचित्र तक पहुंचने का मौका देता है जिससे प्रदर्शन में सुधार होता है। |