Java Collections: वे छिपे हुए टूल्स जिन्हें आप मिस कर रहे हैं

अधिकांश डेवलपर्स हर दिन Java collections का उपयोग एक ही तरह से करते हैं। वे ArrayLists और HashSets का उपयोग करते हैं। लेकिन हो सकता है कि आप उन टूल्स को मिस कर रहे हों जो आपके कोड को तेज़ और सुरक्षित बना सकते हैं।

अपने कोड को बेहतर बनाने के लिए यहाँ तीन विशिष्ट टूल्स दिए गए हैं।

  1. Arrays.asList एक वास्तविक List नहीं है

जब आप Arrays.asList(array) का उपयोग करते हैं, तो आपको एक fixed-size list मिलती है। यह सीधे आपके मूल array से जुड़ी होती है।

  • यदि आप array को बदलते हैं, तो list भी बदल जाती है।
  • यदि आप items को जोड़ने या हटाने का प्रयास करते हैं, तो आपका कोड error के साथ क्रैश हो जाएगा।

इसे ठीक करने के लिए, इसे एक नए ArrayList में wrap करें: List<String> list = new ArrayList<>(Arrays.asList(array));

यह एक वास्तविक, स्वतंत्र list बनाता है जिसे आप modify कर सकते हैं।

  1. परफॉरमेंस के लिए EnumSet का उपयोग करें

क्या आप enums को HashSet में स्टोर करते हैं? इससे अनावश्यक overhead पैदा होता है। HashSets hash tables और object headers का उपयोग करते हैं।

इसके बजाय EnumSet का उपयोग करें। यह आंतरिक रूप से (internally) एक bit vector का उपयोग करता है। यह अत्यंत तेज़ है और लगभग कोई मेमोरी नहीं लेता है। यह player powers या settings जैसे flag-based सिस्टम के लिए एकदम सही है।

  • यह type-safe है।
  • यह HashSet की तुलना में बहुत तेज़ है।
  • यह आपके लिए bitwise operations को संभालता है।
  1. caches के लिए ConcurrentHashMap.computeIfAbsent का उपयोग करें

यदि आप एक cache बनाते हैं, तो आप अक्सर कई threads को एक ही value की गणना करने से रोकने के लिए जटिल कोड लिखते हैं। इसे double-checked locking कहा जाता है। इसे पढ़ना कठिन है और इसमें गलती होने की संभावना अधिक होती है।

इसके बजाय, केवल एक लाइन का उपयोग करें: cache.computeIfAbsent(key, this::expensiveCalculation);

यह method atomic है। यह सुनिश्चित करता है कि गणना केवल एक बार चले, भले ही कई threads एक ही समय में एक ही key के लिए पूछें। यह bugs को कम करता है और आपके उद्देश्य (intent) को स्पष्ट करता है।

ये टूल्स क्यों महत्वपूर्ण हैं:

  • अनुमानित परफॉरमेंस (Predictable performance): आप छिपी हुई मेमोरी लागत से बचते हैं।
  • कम bugs: आप multi-threaded कोड में race conditions से जूझना बंद कर देते हैं।
  • स्पष्ट कोड: अन्य डेवलपर्स आपके डिज़ाइन को तुरंत समझ जाते हैं।

फ्रेमवर्क से लड़ना बंद करें। इसका उपयोग leaner और सुरक्षित कोड लिखने के लिए करना शुरू करें।

Source: https://dev.to/timevolt/java-collections-the-hidden-relics-most-developers-miss-and-why-theyre-game-changers-4ehd