Kotlin: List vs Array — a batalha dos tipos de dados que você precisa conhecer

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Kotlin: List vs Array — qual é o truque?

\n\n

Se você programa em Kotlin há pelo menos uma semana, certamente já se deparou com a pergunta: "Por que não posso simplesmente usar Array em tudo? Para que preciso desses List e MutableList?"

\n\n

Esta pergunta é uma das mais populares no Stack Overflow. E não é à toa. À primeira vista, tanto a lista quanto o array armazenam elementos, podem ser acessados por índice e podem ser iterados. Mas aprofunde-se — e você descobrirá diferenças fundamentais que afetam o desempenho, a segurança do código e até mesmo a forma como você pensa ao projetar a arquitetura.

\n\n

Neste tutorial, vamos detalhar a diferença entre List e Array em Kotlin. Você aprenderá quando usar array e quando usar lista, e por que desenvolvedores experientes quase sempre escolhem List.

\n\n

1. Base: o que é Array em Kotlin?

\n\n

Array em Kotlin é uma projeção direta do array do Java. É uma sequência fixa de elementos do mesmo tipo. Quando você cria um array, aloca memória para ele imediatamente. Não é possível alterar o tamanho do array após a criação.

\n\n
// Criando um array\nval numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)\nprintln(numbers[0]) // 1\nnumbers[2] = 10     // pode alterar o valor\nprintln(numbers[2]) // 10
\n\n

Arrays em Kotlin são mutáveis por natureza: você sempre pode substituir um elemento por índice. Mas você não pode adicionar um novo elemento ou remover um existente. O tamanho é fixo para sempre.

\n\n

Características do Array:

\n
    \n
  • Tamanho fixo — não é possível adicionar ou remover um elemento.
  • \n
  • Conteúdo mutável — é possível sobrescrever elementos.
  • \n
  • Desempenho — máximo, pois é acesso direto à memória.
  • \n
  • Arrays primitivos — existem tipos especiais: IntArray, ByteArray, FloatArray, etc. Eles funcionam sem boxing, o que proporciona ganho de velocidade.
  • \n
\n\n
// Array primitivo — sem boxing\nval intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)
\n\n

2. Base: o que é List em Kotlin?

\n\n

List é uma interface da biblioteca padrão do Kotlin. Ao contrário do array, a lista é uma abstração. Você não sabe exatamente como ela armazena os dados internamente (pode ser ArrayList, LinkedList ou outra coisa).

\n\n
// Criando uma lista imutável\nval fruits: List<String> = listOf("maçã", "banana", "cereja")\nprintln(fruits[0]) // maçã\n// fruits[0] = "laranja" // Erro de compilação!
\n\n

A principal "sacada" do Kotlin é a divisão entre somente leitura (List) e mutável (MutableList).

\n\n

List (somente leitura):

\n
    \n
  • Não é possível alterar o conteúdo (nem adicionar, nem remover, nem substituir).
  • \n
  • Apenas leitura.
  • \n
  • Mais seguro para transferência de dados entre componentes.
  • \n
\n\n

MutableList:

\n
    \n
  • É possível adicionar, remover, substituir elementos.
  • \n
  • Tamanho dinâmico.
  • \n
  • Na prática, na maioria das vezes é usado ArrayList internamente.
  • \n
\n\n
val mutableFruits: MutableList<String> = mutableListOf("maçã", "banana")\nmutableFruits.add("laranja")     // OK\nmutableFruits.remove("banana")  // OK\nmutableFruits[0] = "pera"       // OK
\n\n

3. Principais diferenças List vs Array

\n\n

Vamos resumir tudo em uma tabela visual (no código — na forma de comentários).

\n\n
// 1. Mutabilidade\nval array = arrayOf(1, 2, 3)\narray[0] = 99 // ✅ Funciona\n\nval list = listOf(1, 2, 3)\n// list[0] = 99 // ❌ Erro de compilação\n\nval mutableList = mutableListOf(1, 2, 3)\nmutableList[0] = 99 // ✅ Funciona\n\n// 2. Tamanho\nval fixedArray = arrayOf(1, 2, 3)\n// fixedArray.add(4) // ❌ Esse método não existe\n\nva                

Blogs

Book Recommendations