Kotlin: List vs Array — la batalla de tipos de datos que debes conocer

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Kotlin: List vs Array — ¿cuál es el truco?

\n\n

Si llevas al menos una semana programando en Kotlin, seguramente te has topado con la pregunta: «¿Por qué no puedo usar simplemente Array en todas partes? ¿Para qué necesito List y MutableList?»

\n\n

Esta pregunta es una de las más populares en Stack Overflow. Y con razón. A simple vista, tanto la lista como el array almacenan elementos, se puede acceder a ellos por índice y se pueden recorrer. Pero si profundizas, descubrirás diferencias fundamentales que afectan el rendimiento, la seguridad del código e incluso la forma en que piensas al diseñar la arquitectura.

\n\n

En este tutorial, desglosaremos a fondo la diferencia entre List y Array en Kotlin. Aprenderás cuándo usar un array y cuándo una lista, y por qué los desarrolladores experimentados casi siempre eligen List.

\n\n

1. Conceptos básicos: ¿qué es Array en Kotlin?

\n\n

Array en Kotlin es una proyección directa del array de Java. Es una secuencia fija de elementos del mismo tipo. Cuando creas un array, reservas memoria para él de inmediato. No se puede cambiar el tamaño del array después de crearlo.

\n\n
// Creación de un array\nval numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)\nprintln(numbers[0]) // 1\nnumbers[2] = 10     // se puede cambiar el valor\nprintln(numbers[2]) // 10
\n\n

Los arrays en Kotlin son mutables por naturaleza: siempre puedes reemplazar un elemento por índice. Pero no puedes agregar un nuevo elemento ni eliminar uno existente. El tamaño queda fijado para siempre.

\n\n

Características de Array:

\n
    \n
  • Tamaño fijo — no se puede agregar ni eliminar un elemento.
  • \n
  • Contenido mutable — se pueden sobrescribir los elementos.
  • \n
  • Rendimiento — máximo, ya que es acceso directo a la memoria.
  • \n
  • Arrays primitivos — existen tipos especiales: IntArray, ByteArray, FloatArray, etc. Funcionan sin boxing, lo que proporciona un aumento de velocidad.
  • \n
\n\n
// Array primitivo — sin boxing\nval intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)
\n\n

2. Conceptos básicos: ¿qué es List en Kotlin?

\n\n

List es una interfaz de la biblioteca estándar de Kotlin. A diferencia del array, una lista es una abstracción. No sabes exactamente cómo almacena los datos internamente (puede ser un ArrayList, un LinkedList o algo más).

\n\n
// Creación de una lista inmutable\nval fruits: List<String> = listOf("apple", "banana", "cherry")\nprintln(fruits[0]) // apple\n// fruits[0] = "orange" // ¡Error de compilación!
\n\n

La principal «característica» de Kotlin es la división entre solo lectura (List) y mutable (MutableList).

\n\n

List (solo lectura):

\n
    \n
  • No se puede modificar el contenido (ni agregar, ni eliminar, ni reemplazar).
  • \n
  • Solo se puede leer.
  • \n
  • Más seguro para transferir datos entre componentes.
  • \n
\n\n

MutableList:

\n
    \n
  • Se pueden agregar, eliminar y reemplazar elementos.
  • \n
  • Tamaño dinámico.
  • \n
  • En la práctica, la mayoría de las veces se usa ArrayList internamente.
  • \n
\n\n
val mutableFruits: MutableList<String> = mutableListOf("apple", "banana")\nmutableFruits.add("orange")     // OK\nmutableFruits.remove("banana")  // OK\nmutableFruits[0] = "pear"       // OK
\n\n

3. Diferencias clave entre List y Array

\n\n

Resumamos todo en una tabla visual (en el código, como comentarios).

\n\n
// 1. Mutabilidad\nval array = arrayOf(1, 2, 3)\narray[0] = 99 // ✅ Funciona\n\nval list = listOf(1, 2, 3)\n// list[0] = 99 // ❌ Error de compilación\n\nval mutableList = mutableListOf(1, 2, 3)\nmutableList[0] = 99 // ✅ Funciona\n\n// 2. Tamaño\nval fixedArray = arrayOf(1, 2, 3)\n// fixedArray.add(4) // ❌ No existe ese método\n\nva                

Blogs

Book Recommendations