Array<T>
adalah kelas dengan implementasi yang diketahui: ini adalah wilayah memori ukuran tetap berurutan yang menyimpan item (dan pada JVM diwakili oleh Java array ).
List<T>
dan MutableList<T>
adalah antarmuka yang memiliki implementasi yang berbeda: ArrayList<T>
, LinkedList<T>
dll representasi Memory dan operasi logika dari daftar didefinisikan dalam pelaksanaan beton, misalnya pengindeksan dalam LinkedList<T>
melewati link dan mengambil O (n) waktu sedangkan ArrayList<T>
toko item dalam array dialokasikan secara dinamis.
val list1: List<Int> = LinkedList<Int>()
val list2: List<Int> = ArrayList<Int>()
Array<T>
bisa berubah (bisa diubah melalui referensi apa pun untuk itu), tetapi List<T>
tidak memiliki metode modifikasi (baik tampilan baca-sajaMutableList<T>
atau implementasi daftar yang tidak dapat diubah ).
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
Array memiliki ukuran tetap dan tidak dapat memperluas atau mengecilkan identitas penahan (Anda perlu menyalin array untuk mengubah ukurannya). Adapun daftar, MutableList<T>
memiliki add
dan remove
fungsinya, sehingga dapat menambah dan mengurangi ukurannya.
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>
adalah invarian padaT
( Array<Int>
tidak Array<Number>
), yang sama untuk MutableList<T>
, tetapi List<T>
adalah kovarian ( List<Int>
adalah List<Number>
).
val a: Array<Number> = Array<Int>(0) { 0 } // won't compile
val l: List<Number> = listOf(1, 2, 3) // OK
Array dioptimalkan untuk primitif: ada yang terpisah IntArray
, DoubleArray
, CharArray
dll yang dipetakan ke Jawa array primitif ( int[]
, double[]
, char[]
), bukan kotak yang ( Array<Int>
dipetakan ke Jawa Integer[]
). Daftar pada umumnya tidak memiliki implementasi yang dioptimalkan untuk primitif, meskipun beberapa perpustakaan (di luar JDK) menyediakan daftar yang dioptimalkan primitif.
List<T>
dan MutableList<T>
yang dipetakan jenis dan memiliki perilaku khusus di interoperabilitas Jawa (Jawa List<T>
terlihat dari Kotlin baik sebagai List<T>
atau MutableList<T>
). Array juga dipetakan, tetapi mereka memiliki aturan interoperabilitas Java lainnya.
Jenis array tertentu digunakan dalam anotasi (array primitif Array<String>
,, dan array dengan enum class
entri), dan ada sintaks literal array khusus untuk anotasi . Daftar dan koleksi lainnya tidak dapat digunakan dalam anotasi.
Mengenai penggunaan, praktik yang baik adalah lebih suka menggunakan daftar daripada array di mana-mana kecuali untuk bagian-bagian penting dari kode Anda, alasannya sama dengan Java .
Array
? Hanya elemen - yang sama diList
. UkurannyaList
juga tetap.