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

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

Ambas son list mutable, entonces, ¿cuál es el sentido de dos palabras key mutableListOf o ArrayList ?

o hay alguna diferencia importante?

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

Cuando escribe val a = mutableListOf(1,2,3) , está diciendo "Quiero una list mutable, y no me preocupa particularmente la implementación". Cuando escribe, en cambio, val a = ArrayList(1,2,3) , está diciendo "específicamente quiero una ArrayList ".

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

Ahora, digamos que Kotlin 1.2 cambia mutableListOf para devolver un tipo diferente de list.

Más afortunado que no, habrían hecho ese cambio porque creen que funciona mejor para la mayoría de los casos de uso. mutableListOf haría utilizar esa nueva implementación de list de forma transparente, y obtendrías ese mejor comportamiento de forma gratuita. Vaya con mutableListOf si eso suena como su caso.

Por otro lado, tal vez pasaste mucho time pensando sobre tu problema, y ​​pensaste que ArrayList es la mejor opción para tu problema, y ​​no quieres arriesgarte a que te muevan a algo que no sea óptimo. Entonces, probablemente quiera llamar directamente a ArrayList .

La mutableListOf<T>() es una invocación de function 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 insert.

En otras palabras, dado

  val a = mutableListOf<String>() val b = ArrayList<String>() 
  • a es de tipo MutableList<String>
  • b es del tipo ArrayList<String>

En el time de ejecución, tanto a como b contendrán una instancia de ArrayList .

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

Como puedes ver en las fonts :

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

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

  • Obtuvo NoClassDefFoundError al pasar el map de lambda
  • La sobrecarga es igual a BigDecimal en Kotlin
  • ¿Kotlin tiene un recolector de basura? Si es así, ¿en qué algorithm está basado?
  • Groovy no puede resolver classs de kotlin
  • Cómo mostrar un solo artículo seleccionado en recyclerview usando kotlin
  • Clases de Kotlin sin llaves
  • Cómo evitar la verificación nula networkingundante (advertencia FindBugs) en el campo de Kotlin
  • ¿Cómo implementa HashMap la interfaz MutableMap en Kotlin?
  • ¿Qué lenguajes de progtwigción admiten la implementación implícita de la interfaz por delegación?
  • Cómo mantener el tipo de object para el casting inteligente al devolver cualquier
  • Anotaciones de Enum en Kotlin