जावा में ऐरे को ArrayList में कैसे बदलें: उदाहरणों के साथ 4 तरीके

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

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

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

ऐरे को ArrayList में बदलना: यह जावा डेवलपर के लिए हमेशा सिरदर्द क्यों है

\n\n

जिसने भी कभी जावा में कोड लिखा है, वह इस स्थिति से परिचित होगा: आपके पास एक तैयार ऐरे String[] या int[] है, लेकिन कार्य के अनुसार आपको एक लचीला ArrayList चाहिए जिसमें add(), remove() जैसे तरीके और डायनामिक आकार हो। यह एक छोटी सी बात लगती है, लेकिन यही प्रश्न Stack Overflow पर हज़ारों बार देखा गया और बहुत सारे वोट प्राप्त किए। क्यों? क्योंकि, जैसा कि जावा में अक्सर होता है, एक "स्पष्ट" समाधान है जिसमें छिपे हुए नुकसान होते हैं।

\n\n

इस लेख में हम केवल तैयार कोड नहीं देंगे। हम जावा में ऐरे से ArrayList बनाने के सभी तरीकों पर चर्चा करेंगे, उनके फायदे और नुकसान, प्रदर्शन और सबसे महत्वपूर्ण बात — कब कौन सा विकल्प उपयोग करना है। इसे पढ़ने के बाद, आप अपने कार्य के लिए सही उपकरण चुनने में सक्षम होंगे और सबसे अनपेक्षित क्षण में UnsupportedOperationException से नहीं टकराएंगे।

\n\n

चलिए शुरू करते हैं! (या जैसा कि जाविस्ट कहते हैं — let's dive into the code)

\n\n

तरीका 1: क्लासिक — Arrays.asList()

\n\n

सबसे लोकप्रिय और छोटा तरीका। आपने शायद इसे देखा होगा:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);
\n\n

सुंदर लगता है, है ना? लेकिन एक बारीकी है। विधि Arrays.asList() java.util.ArrayList नहीं, बल्कि अपना आंतरिक स्थैतिक संस्करण — java.util.Arrays.ArrayList लौटाती है। यह एक निश्चित सूची है जो आकार बदलने के संचालन का समर्थन नहीं करती। यदि आप fruitList.add("date") करने का प्रयास करते हैं, तो आपको UnsupportedOperationException मिलेगा।

\n\n

लाभ:

\n
    \n
  • अत्यंत छोटा और पढ़ने योग्य कोड।
  • \n
  • ऐरे और कलेक्शन API के बीच एक पुल के रूप में काम करता है।
  • \n
  • सूची में परिवर्तन मूल ऐरे पर प्रतिबिंबित होते हैं (और इसके विपरीत)।
  • \n
\n\n

नुकसान:

\n
    \n
  • निश्चित आकार — तत्वों को जोड़ा या हटाया नहीं जा सकता।
  • लौटाई गई सूची ऐरे पर एक "रैपर" है, न कि पूर्ण ArrayList।
\n\n

कब उपयोग करें: जब आपको केवल पढ़ने के लिए सूची चाहिए, या जब आप निश्चित रूप से जानते हैं कि आकार नहीं बदलेगा। उदाहरण के लिए, किसी विधि में पास करने के लिए जो List<?> स्वीकार करती है और इसे संशोधित नहीं करती।

\n\n

Arrays.asList() से पूर्ण ArrayList कैसे प्राप्त करें?

\n\n

बस परिणाम को कंस्ट्रक्टर में लपेटें:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nArrayList<String> fruitList = new ArrayList<>(Arrays.asList(fruits));\nfruitList.add("date"); // अब बिना त्रुटि के काम करता है
\n\n

यह तरीका एक सुनहरा मध्य मार्ग है। आप Arrays.asList की छोटी लिखावट का उपयोग करते हैं, लेकिन एक पूर्ण डायनामिक कलेक्शन प्राप्त करते हैं।

\n\n

तरीका 2: Collections.addAll() — गति और नियंत्रण

\n\n

यदि आप प्रदर्शन के लिए जाते हैं या बस दोहरी कॉपी (पहले निश्चित आकार की सूची में, फिर ArrayList में) से बचना चाहते हैं, तो Collections.addAll() विधि है:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nArrayList<String> fruitList = new ArrayList<>(fruits.length);\nCollections.addAll(fruitList, fruits);
\n\n

यहाँ क्या हो रहा है? हम सीधे आवश्यक प्रारंभिक आकार के साथ ArrayList बनाते हैं (आंतरिक ऐरे के अनावश्यक पुनर्निर्माण से बचने के लिए), और फिर एक बार में सभी तत्वों को कॉपी करते हैं। विधि addAll for लूप की तुलना में तेज़ काम करती है, क्योंकि यह निम्न स्तर पर System.arraycopy() को कॉल करती है।

\n\n

लाभ:

\n
    \n
  • उच्च गति — लगभग सीधे मेमोरी कॉपी के स्तर पर।
  • तुरंत परिवर्तन की क्षमता वाला पूर्ण ArrayList प्राप्त होता है।
  • सूची की क्षमता पहले से निर्धारित की जा सकती है।
\n\n

नुकसान:

\n
    \n
  • कोड थोड़ा

ब्लॉग

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