Java में HashMap को कैसे आरंभ करें और पागल न हों: शुरुआती लोगों के लिए पूर्ण विश्लेषण
\n\nक्या आपने कभी Java में कोड लिखा है और महसूस किया है कि एक साधारण शब्दकोश बनाने के लिए पूरी कविता लिखनी पड़ती है? खासकर जब आप इसे Python या JavaScript की तरह सुंदर और संक्षिप्त बनाना चाहते हैं। परिचित दर्द? Stack Overflow पर HashMap को शाब्दिक तरीके से आरंभ करने के सवाल ने हजारों व्यूज प्राप्त किए हैं। और यह कोई संयोग नहीं है।
\n\nइस लेख में, हम Java में HashMap को आरंभ करने के सभी वैध तरीकों पर चर्चा करेंगे, क्लासिक से लेकर आधुनिक तक, कोड उदाहरणों और शुरुआती लोगों के लिए स्पष्टीकरण के साथ। आप सीखेंगे कि एक पंक्ति में मैप कैसे भरें, Map.of() का उपयोग कब करें, और क्यों double brace initialization एक दोधारी तलवार है।
क्यों केवल "डालना" तत्व दर्दनाक है?
\n\nकल्पना करें कि आपको तीन "कुंजी-मान" जोड़ियों के साथ एक HashMap बनाना है। एक शुरुआती का विशिष्ट कोड इस तरह दिखता है:
\n\nHashMap<String, Integer> map = new HashMap<>();\nmap.put("apple", 5);\nmap.put("banana", 3);\nmap.put("orange", 7);\n\nयह ठीक लगता है, लेकिन जब ऐसे दस मैप हों, तो कोड एक चादर में बदल जाता है। आप संक्षिप्तता चाहते हैं, है ना? Python में यह एक पंक्ति में किया जाता है: dict = {"apple": 5, "banana": 3}। और Java में? स्पॉयलर: कई तरीके हैं, और हम अब उन पर चर्चा करेंगे।
विधि #1: Double Brace Initialization (दोहरा ब्रेस आरंभीकरण)
\n\nसबसे लोकप्रिय (और सबसे विवादास्पद) तरीका double brace initialization है। यह इस तरह दिखता है:
\n\nHashMap<String, Integer> map = new HashMap<>() {{\n put("apple", 5);\n put("banana", 3);\n put("orange", 7);\n}};\n\nयह कैसे काम करता है? पहले घुंघराले ब्रेस एक अनाम आंतरिक वर्ग बनाते हैं, जो HashMap से विरासत प्राप्त करता है। दूसरे ब्रेस इंस्टेंस आरंभीकरण ब्लॉक हैं, जो ऑब्जेक्ट बनने पर निष्पादित होते हैं। अंदर सब कुछ put() कॉल है।
लाभ:
\n- \n
- कोड अधिक संक्षिप्त और पठनीय हो जाता है। \n
put()के साथ कई पंक्तियाँ लिखने की आवश्यकता नहीं है। \n
नुकसान (और वे कई हैं):
\n- \n
- प्रदर्शन: हर बार एक अनाम वर्ग बनता है। यह JVM के लिए अतिरिक्त काम है। \n
- मेमोरी: अनाम वर्ग में बाहरी वर्ग का संदर्भ होता है, जो मेमोरी लीक का कारण बन सकता है। \n
- सीरियलाइज़ेशन: यदि आप ऐसे मैप को सीरियलाइज़ करने का प्रयास करते हैं, तो समस्याएँ हो सकती हैं। \n
- असंगति: कुछ फ्रेमवर्क (जैसे Gson के कुछ संस्करण) के साथ काम नहीं करता है। \n
निष्कर्ष: तरीका काम करता है, लेकिन इसे केवल परीक्षण कोड या व्यक्तिगत प्रोजेक्ट में उपयोग करना बेहतर है। प्रोडक्शन के लिए अनुशंसित नहीं है।
\n\nविधि #2: Guava (Google की लाइब्रेरी)
\n\nयदि आप Google Guava का उपयोग करते हैं (और यह एक बहुत लोकप्रिय लाइब्रेरी है), तो समस्या सुरुचिपूर्ण ढंग से हल हो जाती है:
\n\nimport com.google.common.collect.ImmutableMap;\n\nMap<String, Integer> map = ImmutableMap.of(\n "apple", 5,\n "banana", 3,\n "orange", 7\n);\n\nविशेषताएँ:
\n- \n
- एक अपरिवर्तनीय मैप (immutable) बनाया जाता है। \n
of()विधि 0–5 जोड़ियों के लिए ओवरलोडेड है। अधिक के लिएImmutableMap.builder()का उपयोग करें। \n - कॉन्फ़िगरेशन और स्थिर डेटा के लिए उपयुक्त है। \n
नुकसान: बाहरी निर्भरता जोड़नी होगी। यदि प्रोजेक्ट पहले से Guava का उपयोग करता है तो बढ़िया है। यदि नहीं, तो शायद यह प्रयास के लायक नहीं है।
\n\nविधि #3: Java 9+ — Map.of() और Map.ofEntries()
\n\nJava 9 से शुरू करके, मानक लाइब्रेरी में M