Kotlin: List vs Array — क्या है पेच?
\n\nयदि आप कम से कम एक सप्ताह से Kotlin में कोड लिख रहे हैं, तो आपने निश्चित रूप से यह प्रश्न पूछा होगा: "मैं हर जगह केवल Array का उपयोग क्यों नहीं कर सकता? मुझे इन List और MutableList की क्या आवश्यकता है?"
यह प्रश्न Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है। और यह उचित भी है। पहली नज़र में, सूची और सरणी दोनों ही तत्वों को संग्रहीत करते हैं, उन्हें इंडेक्स द्वारा एक्सेस किया जा सकता है, और उन्हें पुनरावृत्त किया जा सकता है। लेकिन गहराई से देखें — और आपको मूलभूत अंतर मिलेंगे जो प्रदर्शन, कोड सुरक्षा और यहां तक कि आर्किटेक्चर डिजाइन करने के आपके तरीके को प्रभावित करते हैं।
\n\nइस ट्यूटोरियल में, हम Kotlin में List और Array के बीच अंतर को विस्तार से समझाएंगे। आप जानेंगे कि सरणी का उपयोग कब करें और सूची का कब, और अनुभवी डेवलपर्स लगभग हमेशा List को क्यों चुनते हैं।
1. आधार: Kotlin में Array क्या है?
\n\nKotlin में Array जावा सरणी का सीधा प्रक्षेपण है। यह एक ही प्रकार के तत्वों का एक निश्चित अनुक्रम है। जब आप एक सरणी बनाते हैं, तो आप तुरंत उसके लिए मेमोरी आवंटित करते हैं। सरणी बनाने के बाद उसका आकार बदला नहीं जा सकता।
// सरणी बनाना\nval numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)\nprintln(numbers[0]) // 1\nnumbers[2] = 10 // मान बदला जा सकता है\nprintln(numbers[2]) // 10\n\nKotlin में सरणियाँ स्वभाव से mutable (परिवर्तनशील) होती हैं: आप हमेशा इंडेक्स द्वारा किसी तत्व को बदल सकते हैं। लेकिन आप कोई नया तत्व नहीं जोड़ सकते या मौजूदा तत्व को हटा नहीं सकते। आकार हमेशा के लिए निश्चित रहता है।
\n\nArray की विशेषताएं:
\n- \n
- निश्चित आकार — तत्व को जोड़ा या हटाया नहीं जा सकता। \n
- परिवर्तनशील सामग्री — तत्वों को ओवरराइट किया जा सकता है।
- प्रदर्शन — अधिकतम, क्योंकि यह मेमोरी तक सीधी पहुंच है।
- प्रिमिटिव सरणियाँ — विशेष प्रकार हैं:
IntArray,ByteArray,FloatArrayआदि। ये boxing-पैकेजिंग के बिना काम करते हैं, जो गति में वृद्धि देता है।
// प्रिमिटिव सरणी — बिना boxing के\nval intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)\n\n2. आधार: Kotlin में List क्या है?
\n\nList Kotlin की मानक लाइब्रेरी का एक इंटरफ़ेस है। सरणी के विपरीत, सूची एक अमूर्तता है। आप नहीं जानते कि यह अंदर डेटा कैसे संग्रहीत करता है (यह ArrayList, LinkedList या कुछ और हो सकता है)।
// अपरिवर्तनीय सूची बनाना\nval fruits: List<String> = listOf("apple", "banana", "cherry")\nprintln(fruits[0]) // apple\n// fruits[0] = "orange" // संकलन त्रुटि!\n\nKotlin की मुख्य "विशेषता" — read-only (List) और mutable (MutableList) में विभाजन है।
List (read-only):
\n- \n
- सामग्री को बदला नहीं जा सकता (न जोड़ें, न हटाएं, न बदलें)।
- केवल पढ़ा जा सकता है।
- घटकों के बीच डेटा स्थानांतरित करने के लिए अधिक सुरक्षित।
MutableList:
\n- \n
- तत्वों को जोड़ा, हटाया, बदला जा सकता है।
- गतिशील आकार।
- व्यवहार में, अक्सर इसके अंतर्गत
ArrayListका उपयोग किया जाता है।
val mutableFruits: MutableList<String> = mutableListOf("apple", "banana")\nmutableFruits.add("orange") // OK\nmutableFruits.remove("banana") // OK\nmutableFruits[0] = "pear" // OK\n\n3. List vs Array के प्रमुख अंतर
\n\nआइए सब कुछ एक स्पष्ट तालिका में संक्षेपित करें (कोड में — टिप्पणियों के रूप में)।
\n\n// 1. परिवर्तनशीलता\nval array = arrayOf(1, 2, 3)\narray[0] = 99 // ✅ काम करता है\n\nval list = listOf(1, 2, 3)\n// list[0] = 99 // ❌ संकलन त्रुटि\n\nval mutableList = mutableListOf(1, 2, 3)\nmutableList[0] = 99 // ✅ काम करता है\n\n// 2. आकार\nval fixedArray = arrayOf(1, 2, 3)\n// fixedArray.add(4) // ❌ ऐसी कोई विधि नहीं है\n\nva