परिचय: Kotlin में खाली सूची का विरोधाभास
\n\nकल्पना करें: आप Kotlin में लिख रहे हैं, और आपको एक ऐसी सूची बनानी है जो गतिशील रूप से भरती जाएगी। आप जानते हैं कि List एक अपरिवर्तनीय संग्रह है, और MutableList वही है जो डॉक्टर ने सुझाया। लेकिन जैसे ही आप val list = MutableList() लिखते हैं, कंपाइलर एक त्रुटि देता है। परिचित लगता है?
यह प्रश्न Kotlin (और न केवल) में शुरुआती लोगों के बीच Stack Overflow पर सबसे लोकप्रिय में से एक है। हजारों डेवलपर्स एक ही समस्या पर अटक जाते हैं: खाली MutableList को सही ढंग से कैसे आरंभ करें? यह एक छोटी सी बात लगती है, लेकिन इसके बिना कोई भी गतिशील एल्गोरिदम काम नहीं करता।
इस लेख में, हम Kotlin में एक खाली परिवर्तनीय सूची बनाने के सभी वैध तरीकों पर चर्चा करेंगे। सरल हैक से लेकर उन्नत तकनीकों तक। आप जानेंगे कि क्यों mutableListOf() आपका सबसे अच्छा दोस्त है, और ArrayList() एक पुराना लेकिन भरोसेमंद साथी है। चलिए शुरू करते हैं!
1. सिर्फ MutableList() काम क्यों नहीं करता?
\n\nआइए पहले मिथक को दूर करें। यदि आप लिखने का प्रयास करते हैं:
\n\n// संकलन त्रुटि!\nval list = MutableList()\n\nकंपाइलर उचित रूप से आपत्ति करेगा। क्यों? क्योंकि MutableList एक इंटरफ़ेस है, कोई ठोस वर्ग नहीं। इंटरफ़ेस को इंस्टेंटिएट नहीं किया जा सकता। यह ब्रांड और मॉडल निर्दिष्ट किए बिना "बस एक कार" बनाने की कोशिश करने जैसा है। Kotlin को एक ठोस कार्यान्वयन की आवश्यकता है।
सौभाग्य से, हमारे पास इस सीमा को दूर करने के कई सुरुचिपूर्ण तरीके हैं।
\n\n2. सबसे आसान तरीका: mutableListOf()
\n\nयह खाली सूचियों का राजा है। Kotlin मानक पुस्तकालय से मानक फ़ैक्टरी फ़ंक्शन:
\n\nval emptyList = mutableListOf<String>()\nprintln(emptyList) // आउटपुट: []\nprintln(emptyList.size) // आउटपुट: 0\n\nयह क्यों बढ़िया है:
\n- \n
- यदि संदर्भ से प्रकार का अनुमान लगाया जा सकता है तो प्रकार निर्दिष्ट करने की आवश्यकता नहीं है \n
- यह हुड के नीचे
ArrayListप्रकार के साथ एकMutableListबनाता है \n - इसे "मेरे लिए कुछ नहीं से एक परिवर्तनीय सूची बनाएं" के रूप में पढ़ा जाता है \n
तत्वों को जोड़ना एक खुशी की बात है:
\n\nval numbers = mutableListOf<Int>()\nnumbers.add(1)\nnumbers.add(2)\nnumbers.add(3)\nprintln(numbers) // [1, 2, 3]\n\nयह विधि 90% मामलों के लिए उपयुक्त है। इसे मुख्य विधि के रूप में याद रखें।
\n\n3. क्लासिक ArrayList() — राजा की वापसी
\n\nयदि आप Java से आए हैं, तो यह विधि आपको परिचित लगेगी। Kotlin Java Collections Framework के साथ पूरी तरह से संगत है, इसलिए आप सीधे ArrayList का उपयोग कर सकते हैं:
val list = ArrayList<String>()\nprintln(list) // []\n\nलेकिन एक बारीक बात है: ArrayList MutableList इंटरफ़ेस का एक ठोस कार्यान्वयन है। यदि भविष्य में आप कार्यान्वयन बदलना चाहते हैं (उदाहरण के लिए, LinkedList में), तो आपको वेरिएबल का प्रकार बदलना होगा। इस अर्थ में, mutableListOf() अधिक लचीला है क्योंकि यह MutableList लौटाता है।
ArrayList() का उपयोग कब करें:
\n- \n
- जब अधिकतम प्रदर्शन की आवश्यकता हो (ArrayList इंडेक्स द्वारा एक्सेस के लिए LinkedList से तेज़ है) \n
- जब आप Java लाइब्रेरीज़ के साथ काम कर रहे हों जो विशेष रूप से ArrayList की अपेक्षा करती हैं \n
- जब आप सचेत रूप से एक विशिष्ट कार्यान्वयन चुन रहे हों \n
4. चालाक तरीका: MutableList(size) { defaultValue }
\n\nकभी-कभी खाली सूची वास्तव में "खाली" नहीं होती। कभी-कभी पूर्व निर्धारित आकार वाली लेकिन खाली मानों वाली सूची बनाने की आवश्यकता होती है। इसके लिए कंस्ट्रक्टर का एक ओवरलोड है:
\n\n// 5 तत्वों की सूची बनाएं, प्रत्येक एक खाली स्ट्रिंग\nval list = MutableList(5) { "" }\nprintln(list) // [, , , , ]\nprintln(list.size) // 5\n\nयह बिल्कुल खाली सूची नहीं है, बल्कि "डमी" मानों से आरंभ की गई सूची है। यह तब उपयोगी होता है जब आप तत्वों की संख्या जानते हैं, लेकिन उन्हें ओवरराइट करेंगे।
\n\nपूर्ण शून्य के लिए,
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
रस्ट में स्वच्छ कोड: सिद्धांत और व्यावहारिक उदाहरण
जावा अनुप्रयोगों के प्रदर्शन का अनुकूलन: शुरुआती लोगों के लिए मार्गदर्शिका
C++ में दिनांक और समय के साथ उन्नत कार्य: chrono से टाइमज़ोन तक
Go में एसिंक्रोनस प्रोग्रामिंग: अभ्यास के साथ पूर्ण गाइड
tsconfig.json त्रुटि: Build:No inputs were found in config file को ठीक करें