Alejandro Javier Viscarra Hernández
Ejercicio:
Cuando trabajas con colecciones en Kotlin, entender la diferencia entre listas inmutables, mutables y arrays te ayuda a escribir código más eficiente. Cada estructura tiene reglas claras sobre cómo accedes, modificas o eliminas sus elementos, y elegir bien depende del tipo de operación que necesitas.
¿Qué es una lista inmutable en Kotlin y cómo se declara?
Una lista inmutable se declara con listOf y, aunque permite acceder y modificar el contenido de sus posiciones, no deja agregar ni eliminar elementos después de su creación. Su tamaño queda fijo desde el inicio, igual que ocurre con un array [1:00].
La diferencia real frente al array está en las funciones disponibles. Mientras un array ofrece utilidades básicas como get, set, contains y joinToString, una lista inmutable expande ese set con métodos como first, last, lastIndex y subList, entre muchos otros.
¿Cuándo conviene usar un array en lugar de una lista? Cuando trabajas con una cantidad clara de elementos y necesitas acceso rápido a memoria. Los arrays son más eficientes en ese aspecto, aunque ofrezcan menos funcionalidades.
¿Cómo funciona subList para segmentar una lista?
El método subList te permite extraer un fragmento de la colección indicando dos posiciones. Aquí está el detalle importante: el segundo índice es excluyente, así que si pides subList(1, 2) solo obtienes el elemento en la posición 1, no el de la posición 2 [3:30].
Un comportamiento curioso es que subList no lanza excepción aunque el índice superior coincida con el tamaño del arreglo. Kotlin entiende que ese límite es excluyente y simplemente toma los elementos hasta esa frontera.
kotlin val listOfEmails = listOf("juan@empresa", "ana@empresa", "wilson@empresa") val nuevaLista = listOfEmails.subList(1, 3) println(nuevaLista)
¿Cómo acceder al primero y último elemento de una lista?
Kotlin entrega funciones directas para los elementos extremos sin necesidad de calcular índices manualmente. Estas tres son las que más vas a usar:
first() retorna el primer elemento de la colección.last() retorna el último elemento.lastIndex retorna la posición numérica del último elemento.Por ejemplo, si tu lista contiene juan@empresa, ana@empresa y wilson@empresa, first() te devuelve juan, last() te devuelve wilson y lastIndex te devuelve 2 [5:30].
¿Cuándo uso llaves y cuándo solo signo de pesos al imprimir?
Dentro de un string template, las llaves ${} solo son necesarias cuando interpolas expresiones complejas. Si vas a imprimir una sola variable, basta con $nombreVariable. El IDE incluso te sugiere remove curly braces cuando son innecesarias.
¿Qué diferencia hay entre listOf y mutableListOf?
listOfcrea una lista de tamaño fijo donde puedes leer y modificar posiciones, pero no agregar ni eliminar.mutableListOfpermite cambiar el tamaño dinámicamente con métodos comoaddyremoveAt.
¿Cómo resolver un ejercicio con una lista mutable de asuntos?
El reto consiste en crear una lista mutable de asuntos de email, agregar tres elementos, modificar el segundo, eliminar el primero y mostrar el resultado. La estructura ideal aquí es mutableListOf<String>() porque su tamaño cambia durante la ejecución [8:30].
Estos son los pasos del ejercicio:
removeAt(0).size.kotlin val asuntos = mutableListOf("Reunión de equipo", "Reporte mensual", "Invitación de evento") println("Inicial: $asuntos") asuntos[1] = "Reporte semanal" println("Modificada: $asuntos") asuntos.removeAt(0) println("Final: $asuntos, tamaño: ${asuntos.size}")
El resultado final es una lista con dos elementos: reporte semanal e invitación de evento. Esa flexibilidad es justamente lo que diferencia a mutableListOf de las opciones inmutables.
¿Cuál estructura elegir según el caso?
Usa arrays cuando el tamaño es fijo y priorizas velocidad de acceso. Usa listOf cuando necesitas funcionalidades extra como subList, first o last, pero el tamaño no cambia. Usa mutableListOf cuando vas a agregar o remover elementos durante la ejecución del programa.
¿Qué método de los disponibles en la documentación te llamó más la atención y para qué proyecto lo usarías? Déjamelo en los comentarios.
val asuntosDeEmails = mutableListOf<String>() asuntosDeEmails.addAll(listOf("Reunion con jefe de platzi", "Contratacion Junior", "Contratación de Claude Code")) println("Elementos agregados: ${asuntosDeEmails.joinToString()}") asuntosDeEmails[1] = "Contración Junior Software Enginner" println("Elementos nuevos: ${asuntosDeEmails.joinToString()}") asuntosDeEmails.removeAt(0) println("Elementos nuevos: ${asuntosDeEmails.joinToString()}") println("Lista final: ${asuntosDeEmails.joinToString()} y su tamaño es: ${asuntosDeEmails.size}")
Alejandro Javier Viscarra Hernández
Ejercicio:
Samuel Pérez Peña
ESOOOO!
Alvaro A. Perea Ospina
Me esta encantando este curso.
El profe explica muy bien. 💚
Bryan Quispe
Aquí mezclando un poquito de todo, de las radios que escucho en Perú.
Bryan Quispe
Ahora que veo, usé ArrayList<String> Es lo mismo que mutableListOf<String>. Solo que aún no dejo Java atrás y mi memoria muscular xddd (En los dedos) me hizo codear eso.
Isaí Sánchez Jiménez
Mi solución :)
val asuntosEmail = mutableListOf("Reunion de equipo", "Reporte mensual","Invitacion de evento") asuntosEmail.set(1,"Reporte semanal") asuntosEmail.removeFirst() println("Lista de asuntos de email: ${asuntosEmail.joinToString()}")
Montserrath Galván Velázquez
Esta fue mi forma de hacerla, de diferente solo usé el método set() :)
Daniel Zarazua Aguilar
las listas sin mejores si planeas hacer varias modificaciones aunque consumen mayor tiempo de ejecución