Array<T>
ज्ञात कार्यान्वयन के साथ एक वर्ग है: यह एक अनुक्रमिक निश्चित आकार का मेमोरी क्षेत्र है जिसमें आइटम संग्रहीत होते हैं (और JVM पर यह जावा सर्वर द्वारा दर्शाया गया है )।
List<T>
और MutableList<T>
: इंटरफेस है जो विभिन्न कार्यान्वयन कर रहे हैं ArrayList<T>
, LinkedList<T>
आदि मेमोरी प्रतिनिधित्व और संचालन सूचियों का तर्क ठोस कार्यान्वयन, जैसे में परिभाषित कर रहे हैं एक में अनुक्रमण LinkedList<T>
लिंक के माध्यम से चला जाता है और जबकि हे (एन) समय लगता ArrayList<T>
भंडार एक गतिशील आवंटित सरणी में अपने आइटम नहीं है।
val list1: List<Int> = LinkedList<Int>()
val list2: List<Int> = ArrayList<Int>()
Array<T>
परिवर्तनशील है (इसे किसी भी संदर्भ के माध्यम से बदला जा सकता है), लेकिन List<T>
इसमें संशोधन करने के तरीके नहीं हैं (यह या तो केवल पढ़ने योग्य हैMutableList<T>
या एक अपरिवर्तनीय सूची कार्यान्वयन है )।
val a = arrayOf(1, 2, 3)
a[0] = a[1] // OK
val l = listOf(1, 2, 3)
l[0] = l[1] // doesn't compile
val m = mutableListOf(1, 2, 3)
m[0] = m[1] // OK
Arrays का निश्चित आकार होता है और पहचान बरकरार रखने का विस्तार या छोटा नहीं कर सकता (आपको इसे आकार देने के लिए किसी सरणी की प्रतिलिपि बनाने की आवश्यकता होती है)। जैसा कि सूचियों, MutableList<T>
में है add
और remove
कार्य करता है, ताकि यह अपने आकार को बढ़ा सके और कम कर सके।
val a = arrayOf(1, 2, 3)
println(a.size) // will always be 3 for this array
val l = mutableListOf(1, 2, 3)
l.add(4)
println(l.size) // 4
Array<T>
पर अपरिवर्तनीय हैT
( Array<Int>
नहीं है Array<Number>
), के लिए समान है MutableList<T>
, लेकिन List<T>
सहसंयोजक ( List<Int>
है List<Number>
)।
val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
val l: List<Number> = listOf(1, 2, 3) // OK
सरणी पुरातन लिए अनुकूलित कर रहे: अलग देखते हैं IntArray
, DoubleArray
, CharArray
आदि जो जावा आदिम सरणियों पर मैप किए जाते ( int[]
, double[]
, char[]
), नहीं बॉक्सिंग लोगों ( Array<Int>
जावा के लिए मैप किया गया है Integer[]
)। सामान्य तौर पर सूचियों में आदिम के लिए अनुकूलित कार्यान्वयन नहीं होते हैं, हालांकि कुछ पुस्तकालय (JDK के बाहर) आदिम-अनुकूलित सूची प्रदान करते हैं।
List<T>
और MutableList<T>
कर रहे हैं प्रकार मैप किया और जावा अंतर में विशेष व्यवहार (जावा के लिए है List<T>
के रूप में या तो Kotlin से देखा जाता है List<T>
या MutableList<T>
)। Arrays की मैपिंग भी की जाती है, लेकिन उनके पास जावा इंटरऑपरेबिलिटी के अन्य नियम हैं ।
कुछ सरणी प्रकार का उपयोग एनोटेशन (आदिम सरणियों, Array<String>
और enum class
प्रविष्टियों के साथ सरणियों ) में किया जाता है, और एनोटेशन के लिए एक विशेष सरणी शाब्दिक वाक्यविन्यास है । सूची और अन्य संग्रह का उपयोग एनोटेशन में नहीं किया जा सकता है।
उपयोग के रूप में, अच्छा अभ्यास आपके कोड के प्रदर्शन के महत्वपूर्ण हिस्सों को छोड़कर हर जगह सरणियों की सूची का उपयोग करना पसंद करता है, तर्क जावा के लिए समान है ।
Array
? केवल यह तत्व है - उसी मेंList
। का आकारList
भी निश्चित है।