जैसा कि हम जानते हैं कि जावा कलेक्शंस डेटा को धारण करने के लिए सबसे महत्वपूर्ण डेटा संरचनाओं में से एक है। कलेक्शंस में Map, Set, List आदि जैसे कई कार्यान्वयन हैं जो इसे डेटा भंडारण के लिए सबसे योग्य बनाते हैं और तदनुसार डेटा को संभालते हैं क्योंकि ये कार्यान्वयन न केवल डेटा भंडारण को प्रभावी बनाते हैं बल्कि मल्टी-थ्रेडिंग वातावरण में डेटा हैंडलिंग की भी अनुमति देते हैं।
कलेक्शंस के अन्य सभी कार्यान्वयनों में से HashMap सबसे महत्वपूर्ण कलेक्शंस में से एक है जो डेटा को Key Value जोड़ी में संग्रहीत करता है। मल्टी-थ्रेडिंग के संदर्भ में कलेक्शंस का एक और कार्यान्वयन है जिसे Concurrent Collection के नाम से जाना जाता है जो HashMap के गुणों के साथ-साथ मल्टी-थ्रेडिंग वातावरण में डेटा हैंडलिंग की भी अनुमति देता है।
दोनों कलेक्शंस के आंतरिक कार्यान्वयन के आधार पर निम्नलिखित महत्वपूर्ण अंतर हैं।
| क्र. सं. | मुख्य बिंदु | HashMap | ConcurrentHashMap |
|---|---|---|---|
| 1 | समवर्तीता | जैसा कि ऊपर उल्लेख किया गया है, दोनों कलेक्शंस के बीच मुख्य अंतर समवर्तीता का है। HashMap थ्रेड-सेफ नहीं है। | दूसरी ओर ConcurrentHashMap थ्रेड-सेफ है और मल्टी-थ्रेडेड वातावरण में उपयोग के लिए उपयुक्त है। |
| 2 | कार्यान्वयन | HashMap और ConcurrentHashMap आंतरिक रूप से अलग-अलग कार्यान्वित हैं क्योंकि HashMap में अपने स्टोरेज मैकेनिज्म में सेगमेंट की अवधारणा नहीं है और डेटा को Key Value जोड़ी में संग्रहीत करता है। | दूसरी ओर ConcurrentHashMap का कार्यान्वयन इस तरह से किया गया है कि ConcurrentHashMap को इनिशियलाइज़ेशन पर कई सेगमेंट में विभाजित किया जाता है [डिफ़ॉल्ट 16]। ConcurrentHashMap समान संख्या (16) के थ्रेड्स को इन सेगमेंट्स को समवर्ती रूप से एक्सेस करने की अनुमति देता है ताकि उच्च समवर्तीता के दौरान प्रत्येक थ्रेड एक विशिष्ट सेगमेंट पर काम करे। |
| 3 | पेश किया गया | HashMap JDK 1.2 में पेश किया गया | दूसरी ओर ConcurrentHashMap को SUN माइक्रोसिस्टम द्वारा JDK 1.5 में पेश किया गया। |
| 4 | Null अनुमति | जैसा कि ऊपर उल्लेख किया गया है, HashMap के मामले में Key और Values के लिए Null मान अनुमत हैं। | दूसरी ओर ConcurrentHashMap में Key और Value दोनों के लिए Null मान अनुमत नहीं है और यदि ऐसी प्रविष्टि का प्रयास किया जाता है तो NullPointerException कहते हुए रन-टाइम अपवाद मिलता है। |
| 5 | सिंक्रनाइज़ेशन | HashMap ConcurrentHashMap से बेहतर है क्योंकि कोई सिंक्रनाइज़ेशन नहीं है। | दूसरी ओर ConcurrentHashMap में, थ्रेड-सेफ्टी को पूरे Map को समवर्तीता स्तर के आधार पर विभिन्न पार्टीशन में विभाजित करके और पूरे Map को लॉक करने के बजाय केवल विशेष भाग को लॉक करके प्राप्त किया जाता है। |
| 6 | प्रदर्शन | हम HashMap को Collections.synchronizedMap(HashMap) में लपेटकर सिंक्रनाइज़ कर सकते हैं जो एक संग्रह लौटाएगा जो Hashtable के लगभग समतुल्य है, जहां Map पर हर संशोधन ऑपरेशन Map ऑब्जेक्ट पर लॉक होता है। | जैसा कि ऊपर उल्लेख किया गया है, यदि Collections.SynchronizedMap() विधि का उपयोग करने की आवश्यकता है तो ConcurrentHashMap() एक बेहतर विकल्प है क्योंकि ConcurrentHashMap अभी भी एक से अधिक थ्रेड को Map एक्सेस करने का मौका देता है जिससे प्रदर्शन में सुधार होता है। |