Saltar al contenido

Diferencia entre ArrayList() y mutableListOf() en Kotlin

Solución:

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

Cuando escribes val a = mutableListOf(), estás 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 en la JVM, llamar mutableListOf producirá un ArrayList, y no hay diferencia en el comportamiento: una vez que se crea la lista, todo se comportará igual.

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

Lo más probable es que el equipo de Kotlin solo haga ese cambio si se da cuenta de que la nueva implementación funciona mejor para la mayoría de los casos de uso. mutableListOf entonces tendría que usar esa nueva implementación de lista de forma transparente, y obtendría ese mejor comportamiento de forma gratuita. Ir con mutableListOf si ese suena como tu caso.

Por otro lado, tal vez pasaste mucho tiempo pensando en tu problema y pensaste que ArrayList De Verdad es la que mejor se adapta a su problema y no quiere arriesgarse a que lo trasladen a algo que no sea óptimo. Entonces probablemente quieras usar ArrayList directamente, o utilice el arrayListOf función de fábrica (una ArrayList-análogo específico de mutableListOf).

mutableListOf<T>() es una invocación de función en línea que devuelve un
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, dado:

 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, ambos a y b tendrá una instancia de ArrayList.

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

Como puede ver en las fuentes:

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

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *