एक पंक्ति में Java में ArrayList का आरंभीकरण: रहस्य और खतरे

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में एक पंक्ति में ArrayList: शुरुआती से विशेषज्ञ तक

\n\n

कल्पना करें: आप एक टेस्ट लिख रहे हैं, एक प्रोटोटाइप बना रहे हैं, या बस जल्दी से स्ट्रिंग्स की एक सूची सेट करना चाहते हैं। Python में यह my_list = ["a", "b", "c"] जैसा दिखता है। Java में… सिरदर्द शुरू हो जाता है। क्या वाकई हर बार तीन-चार लाइनें लिखनी होंगी, प्रत्येक एलिमेंट के लिए add() कॉल करना होगा? स्पॉइलर: नहीं। इस लेख में हम एक पंक्ति में ArrayList को आरंभ करने के सभी तरीकों पर चर्चा करेंगे, Stack Overflow के सबसे सामान्य प्रश्नों के उत्तर देंगे और दिखाएंगे कि कार्य के आधार पर कौन सी विधि चुननी चाहिए। चलिए शुरू करते हैं!

\n\n

यह सामग्री Stack Overflow के एक वास्तविक लोकप्रिय प्रश्न पर आधारित है, जिसे हजारों बार देखा गया है। हमने इसे सीखने के लिए अनुकूलित किया है, ताकि आप केवल कोड कॉपी न करें, बल्कि समझें कि यह क्यों काम करता है (या नहीं करता)।

\n\n

सरल आरंभीकरण दर्द क्यों है?

\n\n

Java में ArrayList है - एक डायनामिक ऐरे। लेकिन इसमें ऐरे की तरह डेटा के साथ बनाने के लिए कोई अंतर्निहित लिटरल नहीं है (String[] arr = {"a", "b", "c"};)। इसलिए शुरुआती अक्सर ऐसे लिखते हैं:

\n\n
ArrayList<String> list = new ArrayList<>();\nlist.add("Java");\nlist.add("Python");\nlist.add("JavaScript");
\n\n

यह काम करता है, लेकिन इसमें 4 लाइनें लगती हैं। और अगर 10 एलिमेंट हों? 100? अधिक संक्षिप्त चाहिए। आइए एक पंक्ति में ऐसा करने के सभी वैध और कम वैध तरीकों पर चर्चा करें।

\n\n

विधि 1: क्लासिक - Arrays.asList()

\n\n

सबसे लोकप्रिय विधि, जो आपको Stack Overflow के उत्तरों में मिलेगी:

\n\n
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
\n\n

यहाँ हम पहले Arrays.asList() का उपयोग करके एक निश्चित आकार की सूची बनाते हैं, फिर इसे ArrayList कंस्ट्रक्टर में पास करते हैं। परिणाम एक पूर्ण परिवर्तनीय सूची है। आप एलिमेंट जोड़, हटा और बदल सकते हैं।

\n\n

महत्वपूर्ण: Arrays.asList() स्वयं वापस नहीं करता ArrayList! यह निश्चित आकार की सूची का अपना आंतरिक कार्यान्वयन लौटाता है। यदि आप Arrays.asList() के परिणाम पर add() कॉल करने का प्रयास करते हैं, तो आपको UnsupportedOperationException मिलेगा। इसे याद रखें - यह इंटरव्यू और Stack Overflow थ्रेड्स में सबसे आम प्रश्न है।

\n\n

कब उपयोग करें?

\n
    \n
  • जब आपको एक परिवर्तनीय सूची की आवश्यकता हो।
  • \n
  • जब आप Java 7 और उससे नीचे (Java 9 से पहले) काम कर रहे हों।
  • \n
\n\n

विधि 2: Java 9+ - List.of()

\n\n

Java 9 से शुरू करके, फैक्ट्री विधि List.of() आई:

\n\n
List<String> immutableList = List.of("a", "b", "c");
\n\n

छोटा, सुंदर, संक्षिप्त। लेकिन एक बात है: प्राप्त सूची अपरिवर्तनीय (immutable) है। आप कोई एलिमेंट जोड़ या हटा नहीं सकते। यदि प्रयास करेंगे - UnsupportedOperationException मिलेगा।

\n\n

यदि आपको विशेष रूप से ArrayList चाहिए, तो इसे लपेटें:

\n\n
ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c"));
\n\n

यह विधि Arrays.asList() से बेहतर है यदि आप Java 9 या उससे ऊपर का उपयोग कर रहे हैं, क्योंकि List.of() एक संरचनात्मक रूप से अपरिवर्तनीय सूची लौटाता है (आकार नहीं बदल सकता), Arrays.asList() के विपरीत, जो set() के माध्यम से एलिमेंट बदलने की अनुमति देता है।

\n\n

कब उपयोग करें?

\n
    \n
  • Java 9+
  • \n
  • छोटे सिंटैक्स की आवश्यकता
  • \n
  • आप सूची को बदलने की योजना नहीं बनाते (या ArrayList में लपेटते हैं)
  • \n
\n\n

विधि 3: दोहरा आरंभीकरण (Double Brace) - एंटीपैटर्न

\n\n

Stack Overflow पर यह ट्रिक अक्सर दिखाई देती है। यह इस तरह दिखता है:

\n\n
ArrayList<String> list = new ArrayList<>() {{\n    add("a");\n    add("b");\n    add("c");\n}};
\n\n

यहाँ क्या हो रहा है? हम एक अनाम आंतरिक वर्ग बना रहे हैं, जो ArrayLi

ब्लॉग

पुस्तक अनुशंसाएँ