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 adddan removefungsinya, 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, CharArraydll 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 classentri), 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. UkurannyaListjuga tetap.