Antworten:
Der einzige Unterschied zwischen den beiden besteht darin, Ihre Absicht mitzuteilen.
Wenn Sie schreiben val a = mutableListOf(), sagen Sie: "Ich möchte eine veränderbare Liste, und die Implementierung ist mir nicht besonders wichtig." Wenn Sie stattdessen schreiben, val a = ArrayList()sagen Sie "Ich möchte speziell eine ArrayList".
In der Praxis führt der Aufruf in der aktuellen Implementierung der Kotlin-Kompilierung in die JVM zu mutableListOfeinem ArrayList, und es gibt keinen Unterschied im Verhalten: Sobald die Liste erstellt ist, verhält sich alles gleich.
Angenommen, eine zukünftige Version von Kotlin ändert sich mutableListOf, um einen anderen Listentyp zurückzugeben.
Wahrscheinlich würde das Kotlin-Team diese Änderung nur vornehmen, wenn es feststellt, dass die neue Implementierung für die meisten Anwendungsfälle besser funktioniert. mutableListOfWenn Sie dann diese neue Listenimplementierung transparent verwenden, erhalten Sie dieses bessere Verhalten kostenlos. Gehen Sie mit, mutableListOfwenn das nach Ihrem Fall klingt.
Auf der anderen Seite haben Sie vielleicht eine Menge Zeit damit verbracht, über Ihr Problem nachzudenken, und festgestellt, dass dies ArrayList wirklich am besten zu Ihrem Problem passt, und Sie möchten nicht riskieren, sich auf etwas Suboptimales zu konzentrieren. Dann möchten Sie wahrscheinlich entweder ArrayListdirekt oder die arrayListOfFactory-Funktion verwenden (ein ArrayListspezifisches Analogon zu mutableListOf).
mutableListOf<T>()ist ein Inline-Funktionsaufruf, der a zurückgibt
MutableList<T>. Gibt ab heute mutableListOfeine Instanz von zurück ArrayList.
ArrayList<String>() ist ein Konstruktoraufruf und kann nicht eingefügt werden.
Mit anderen Worten, gegeben:
val a = mutableListOf<String>()
val b = ArrayList<String>()
a ist vom Typ MutableList<String>b ist vom Typ ArrayList<String>Zur Laufzeit halten beide aund beine Instanz von ArrayList.
Beachten Sie, dass inlining ist besonders nützlich , wenn sie mit kombinierten Typ Verdinglichung , die die Existenz rechtfertigt listOf, mutableListOfund dergleichen.
aund bhaben einen anderen deklarierten Typ - es gibt also einen Unterschied bei der Kompilierung.
val b = arrayListOf<String>()
Wie Sie in Quellen sehen können :
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Es gibt also keinen Unterschied, nur eine bequeme Methode.
mutableListOfnochArrayListsind Schlüsselwörter in Kotlin