Curso de Kotlin

Listas inmutables y mutables en Kotlin

Curso de Kotlin

Contenido del curso

Listas inmutables y mutables en Kotlin

Resumen

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? listOf crea una lista de tamaño fijo donde puedes leer y modificar posiciones, pero no agregar ni eliminar. mutableListOf permite cambiar el tamaño dinámicamente con métodos como add y removeAt.

¿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:

  1. Inicializa la lista con tres asuntos: reunión de equipo, reporte mensual e invitación de evento.
  2. Imprime el estado inicial para validar el contenido.
  3. Modifica la posición 1 cambiando reporte mensual por reporte semanal.
  4. Elimina el primer elemento con removeAt(0).
  5. Muestra la lista final junto con su tamaño usando 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.