Wie initialisiere ich Kotlins MutableList, um MutableList zu leeren?

241

Scheint so einfach, aber wie initialisiere ich Kotlins, um sie MutableListzu leeren MutableList?

Ich könnte es so hacken, aber ich bin mir sicher, dass etwas einfacher verfügbar ist:

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

Antworten:

436

Sie können einfach schreiben:

val mutableList = mutableListOf<Kolory>()

Dies ist der idiomatischste Weg.

Alternative Wege sind

val mutableList : MutableList<Kolory> = arrayListOf()

oder

val mutableList : MutableList<Kolory> = ArrayList()

Dies nutzt die Tatsache aus, dass Java-Typen wie ArrayListden Typ implizit MutableListüber einen Compiler-Trick implementieren .

Kirill Rakhman
quelle
Müssen Sie etwas importieren? Wenn ich dies in meinem aktuellen Projekt schreibe, erhalte ich eine ungelöste Referenz arrayListOf und dasselbe, wenn ich mutableListOf
vextorspace am
Hast du die stdlib in deinem Klassenpfad?
Kirill Rakhman
Ich musste nur mein kotlin_version-Flag in meinem build.gradle zurück auf 1.1.0 anstatt auf 1.1.1
vextorspace
1
weil @androiddeveloper das ist kotlin.collections.Listist nicht java.utils.List . Kotlin verfügt über einen Mechanismus zum Zuordnen einiger integrierter Java-Typen. Weitere Informationen finden Sie unter kotlinlang.org/docs/reference/java-interop.html#mapped-types und ähnlichen SO-Fragen. Der Kommentarbereich ist nicht geeignet, um dies im Detail zu diskutieren.
Kirill Rakhman
1
@ Mohanakrrishna Ja, die Funktionen unterstützen das Übergeben von Argumenten.
Kirill Rakhman
17

Verschiedene Formen je nach Listentyp für Array-Liste:

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

Für LinkedList:

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

Für andere Listentypen wird Mutable angenommen, wenn Sie sie direkt erstellen:

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

Dies gilt für alles, was die ListSchnittstelle implementiert (dh für andere Sammlungsbibliotheken).

Der Typ auf der linken Seite muss nicht wiederholt werden, wenn die Liste bereits veränderbar ist. Oder nur, wenn Sie sie als schreibgeschützt behandeln möchten, zum Beispiel:

val myList: List<Kolory> = ArrayList()
Jayson Minard
quelle
Was ist, wenn ich die Größe der neuen MutableList kenne? Für ArrayList kann ich Folgendes tun: ArrayList(24)Wenn ich zum Beispiel denke, dass 24 ein guter Anfang dafür ist, wird es wahrscheinlich nicht mehr als es brauchen.
Android-Entwickler
@androiddeveloper Zeigen Sie die Dokumente für die Listenkonstruktoren oder die Java-API für die zugrunde liegenden Listen an, und Sie sehen Optionen für das, was Sie möchten.
Jayson Minard
du hast es vergessen mutableListOf. Das richtige wäre:val myList = arrayListOf<Kolory>() // same as // val myList = mutableListOf<Kolory>()
user924
10

Ich mag unten:

var book: MutableList<Books> = mutableListOf()

/ ** Gibt eine neue [MutableList] mit den angegebenen Elementen zurück. * /

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