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()

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.


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()

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))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.