Array<T>
bilinen bir uygulamaya sahip bir sınıftır: öğeleri depolayan sıralı sabit boyutlu bir bellek bölgesidir (ve JVM'de Java dizisi ile temsil edilir ).
List<T>
ve MutableList<T>
: farklı uygulamaları var arayüzleri vardır ArrayList<T>
, LinkedList<T>
listelerin mantığı beton uygulanması, örneğin tanımlanır vb Bellek gösterimi ve operasyonlar bir de indeksleme LinkedList<T>
linkleri geçer ve oysa O (n) zaman alır ArrayList<T>
bir dinamik olarak ayrılan dizide kendi ürün mağazalarında.
val list1: List<Int> = LinkedList<Int>()
val list2: List<Int> = ArrayList<Int>()
Array<T>
değişkendir (herhangi bir referansla değiştirilebilir), ancak List<T>
değiştirme yöntemlerine sahip değildir ( salt okunur görünümMutableList<T>
veya değişmez liste uygulamasıdır ).
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
Diziler sabit boyuta sahiptir ve tutma kimliğini genişletemez veya daraltamaz (yeniden boyutlandırmak için bir diziyi kopyalamanız gerekir). Listelere, MutableList<T>
sahip add
ve remove
işlevlere gelince, boyutunu artırabilir ve azaltabilir.
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>
olduğu invaryantT
( Array<Int>
değildir Array<Number>
) aynı MutableList<T>
fakat List<T>
(bildirdiğinden olduğu List<Int>
bir List<Number>
).
val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
val l: List<Number> = listOf(1, 2, 3) // OK
Diziler ilkel için optimize edilmiştir: orada ayrı IntArray
, DoubleArray
, CharArray
Java ilkel diziler eşlemlendiği vb ( int[]
, double[]
, char[]
) değil, kutulu olanlar ( Array<Int>
Java'nın eşleştirilir Integer[]
). Listeler genel olarak ilkel öğeler için optimize edilmiş uygulamalara sahip değildir, ancak bazı kütüphaneler (JDK dışında) ilkel olarak optimize edilmiş listeler sağlar.
List<T>
ve MutableList<T>
edilir türlerini eşlenen ve Java entegre edilmesi konusunda özel bir davranış (Java en sahip List<T>
olarak ya KOTLIN görüldüğü List<T>
ya MutableList<T>
). Diziler de eşlenir, ancak Java'nın birlikte çalışabilirliği için başka kuralları vardır .
Bazı dizi türleri ek açıklamalarda (ilkel diziler Array<String>
ve enum class
girişli diziler ) kullanılır ve ek açıklamalar için özel bir dizi değişmez sözdizimi vardır . Listeler ve diğer koleksiyonlar ek açıklamalarda kullanılamaz.
Kullanımla ilgili olarak, iyi bir uygulama, kodunuzun performans açısından kritik bölümleri hariç, her yerde diziler üzerinde listeler kullanmayı tercih etmektir, gerekçe Java ile aynıdır .
Array
? Sadece öğeleri - aynı şeyList
. BoyutuList
da sabittir.