mutablelist initialize inicializar example empty kotlin

initialize - Diferencia entre ArrayList<String>() y mutableListOf<String>() en Kotlin



list object kotlin (3)

Como puedes ver en las sources :

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

Entonces, no hay diferencia, solo un método de conveniencia.

private val repositories = mutableListOf<String>() private val repositories = ArrayList<String>()

Ambas son listas mutables, entonces, ¿cuál es el punto de dos palabras clave mutableListOf o ArrayList ?

o hay alguna diferencia importante?


La única diferencia entre los dos es comunicar tu intención.

Cuando escribe val a = mutableListOf() , está diciendo "Quiero una lista mutable, y no me importa particularmente la implementación". Cuando escribes, en cambio, val a = ArrayList() , estás diciendo "Quiero específicamente una ArrayList ".

En la práctica, en la implementación actual de Kotlin compilando a la JVM, llamar a mutableListOf producirá una ArrayList , y no hay diferencia en el comportamiento: una vez que se construye la lista, todo se comportará igual.

Ahora, supongamos que una versión futura de Kotlin cambia mutableListOf para devolver un tipo diferente de lista.

Más probable que no sea así, el equipo de Kotlin solo haría ese cambio si creen que la nueva implementación funciona mejor para la mayoría de los casos de uso. mutableListOf haría usar esa nueva implementación de la lista de forma transparente y obtendría ese mejor comportamiento de forma gratuita. Vaya con mutableListOf si eso suena como su caso.

Por otro lado, tal vez pasaste un montón de tiempo pensando en tu problema y pensaste que ArrayList realmente es la mejor opción para tu problema, y ​​no quieres arriesgarte a que te trasladen a algo subóptimo. Entonces, probablemente desee utilizar ArrayList directamente o utilizar la función de fábrica arrayListOf (un análogo específico de ArrayList a mutableListOf ).


mutableListOf<T>() es una invocación de función en línea que devuelve MutableList<T> . A partir de hoy, mutableListOf devuelve una instancia de ArrayList .

ArrayList<String>() es una invocación de constructor y no se puede insertar.

En otras palabras dadas

val a = mutableListOf<String>() val b = ArrayList<String>()

  • a es de tipo MutableList<String>
  • b es de tipo ArrayList<String>

En tiempo de ejecución, a y b contendrán una instancia de ArrayList<String>() .

Tenga en cuenta que la alineación es particularmente útil cuando se combina con la reificación de tipos que justifica la existencia de listOf , mutableListOf y similares.