Bagaimana cara menginisialisasi MutableList Kotlin menjadi kosong MutableList?

241

Tampaknya sangat sederhana, tetapi, bagaimana cara menginisialisasi Kotlin MutableListmenjadi kosongMutableList ?

Saya bisa meretasnya dengan cara ini, tetapi saya yakin ada sesuatu yang lebih mudah tersedia:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
ssuukk
sumber

Jawaban:

436

Anda cukup menulis:

val mutableList = mutableListOf<Kolory>()

Ini adalah cara yang paling idiomatis.

Cara alternatif adalah

val mutableList : MutableList<Kolory> = arrayListOf()

atau

val mutableList : MutableList<Kolory> = ArrayList()

Ini mengeksploitasi fakta bahwa tipe java seperti ArrayListsecara implisit mengimplementasikan tipe tersebut MutableListmelalui trik compiler.

Kirill Rakhman
sumber
Apakah Anda perlu mengimpor sesuatu? Ketika saya menulis ini dalam proyek saya saat ini, saya mendapatkan arrayListOfof referensi yang belum terselesaikan dan sama jika saya mencoba mutableListOf
vextorspace
Apakah Anda memiliki stdlib di classpath Anda?
Kirill Rakhman
Saya hanya perlu mengganti bendera kotlin_version saya di build.gradle saya kembali ke 1.1.0 bukannya 1.1.1
vextorspace
1
@androiddeveloper bahwa karena kotlin.collections.Listini tidak java.utils.List . Kotlin memiliki mekanisme untuk memetakan beberapa tipe java bawaan. Silakan merujuk ke kotlinlang.org/docs/reference/java-interop.html#mapped-types dan pertanyaan SO serupa. Bagian komentar tidak sesuai untuk membahas ini secara rinci.
Kirill Rakhman
1
@Mohanakrrishna ya, fungsinya mendukung argumen yang lewat.
Kirill Rakhman
17

Berbagai bentuk tergantung pada jenis Daftar, untuk Daftar Array:

val myList = mutableListOf<Kolory>() 
// or more specifically use the helper for a specific list type
val myList = arrayListOf<Kolory>()

Untuk LinkedList:

val myList = linkedListOf<Kolory>()
// same as
val myList: MutableList<Kolory> = linkedListOf()

Untuk jenis daftar lainnya, akan dianggap Mutable jika Anda membuatnya secara langsung:

val myList = ArrayList<Kolory>()
// or
val myList = LinkedList<Kolory>()

Ini berlaku untuk apa pun yang menerapkan List antarmuka (mis. Perpustakaan koleksi lainnya).

Tidak perlu mengulangi jenis di sisi kiri jika daftar sudah Mutable. Atau hanya jika Anda ingin memperlakukannya sebagai hanya baca, misalnya:

val myList: List<Kolory> = ArrayList()
Jayson Minard
sumber
Bagaimana jika saya tahu ukuran MutableList baru? Untuk ArrayList, saya dapat melakukan:, ArrayList(24)misalnya, jika saya pikir 24 adalah awal yang baik untuk itu, bahwa itu mungkin tidak akan membutuhkan lebih dari itu.
pengembang android
@androiddeveloper Melihat dokumen untuk konstruktor daftar atau Java API untuk daftar yang mendasarinya dan Anda akan melihat opsi untuk apa yang Anda inginkan.
Jayson Minard
kamu lupa tentang mutableListOf. Yang benar adalah:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924
10

Saya suka di bawah ini untuk:

var book: MutableList<Books> = mutableListOf()

/ ** Mengembalikan [MutableList] baru dengan elemen yang diberikan. * /

public fun <T> mutableListOf(vararg elements: T): MutableList<T>
    = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))
Chang
sumber