Lógica de ProgramaçãoFundamental· 7 min de leitura

Arrays e Listas: armazenar coleções de dados

Quando você precisa guardar não um, mas muitos valores, os arrays e listas são a solução. Eles organizam coleções de dados de forma eficiente e acessível.

RF

Renato Freitas

Atualizado em 27 de abril de 2026

O que é um array?

Um array (vetor) é uma estrutura de dados que armazena vários valores do mesmo tipo em posições consecutivas na memória, identificadas por um índice numérico. Pense nele como uma fileira de caixas numeradas: cada caixa guarda um valor, e o número da caixa é o índice.

Em vez de criar dez variáveis separadas — nota1, nota2, nota3, … nota10 —, você cria um array notas com dez posições. Isso simplifica o código e permite processar todos os valores com um loop.

Arrays são a estrutura de dados mais fundamental da programação. Listas de contatos, tabelas de preços, sequências de pixels em uma imagem — tudo isso é representado internamente como arrays.

🧮 Teste você mesmo — CalcSim

Quer mais recursos? Baixar app CalcSim IA

Índices: começam em zero

A posição de cada elemento em um array é chamada de índice. Na grande maioria das linguagens de programação (C, Java, Python, JavaScript, Dart), o primeiro elemento tem índice 0, não 1. Então em um array notas com 5 elementos, os índices vão de 0 a 4.

Para acessar o primeiro elemento: notas[0]. Para o último em um array de tamanho n: notas[n - 1]. Tentar acessar notas[5] em um array de 5 elementos causará um erro de índice fora do limite (index out of bounds).

A convenção de começar em zero tem raiz histórica na aritmética de ponteiros em C, onde o índice representa o deslocamento em relação ao início do array na memória. Embora pareça contra-intuitivo no início, você se acostuma rapidamente.

  • Primeiro elemento: array[0]
  • Último elemento: array[tamanho - 1]
  • Tamanho: número total de elementos (não o maior índice).
  • Índice fora do limite: acessar uma posição que não existe causa erro em tempo de execução.

Operações básicas: acessar, inserir, remover e percorrer

Acessar um elemento pelo índice é instantâneo — independentemente do tamanho do array, acessar notas[3] leva o mesmo tempo. Isso se chama acesso em tempo constante e é uma das grandes vantagens dos arrays.

Inserir ou remover elementos no meio de um array é custoso: todos os elementos depois da posição afetada precisam ser deslocados. Por isso, inserções e remoções frequentes no meio de uma coleção são melhor atendidas por outras estruturas, como listas ligadas.

Percorrer todos os elementos — para somar, buscar, filtrar ou transformar — é feito com um loop. Exemplo em pseudocódigo: para cada i de 0 até tamanho - 1, imprimir notas[i]. Muitas linguagens oferecem também o for-each, que percorre os elementos diretamente sem precisar do índice: para cada nota em notas, imprimir nota.

  • Acesso por índice: O(1) — instantâneo, independente do tamanho.
  • Busca linear: O(n) — percorre elemento por elemento até encontrar.
  • Inserção no final: rápida. Inserção no meio: lenta (desloca elementos).
  • Remoção no final: rápida. Remoção no meio: lenta (desloca elementos).

Arrays multidimensionais: tabelas e matrizes

Um array pode ter mais de uma dimensão. Um array bidimensional é como uma tabela ou matriz: tem linhas e colunas. Você acessa um elemento com dois índices: tabela[linha][coluna].

Exemplo: uma grade de notas de 30 alunos em 4 matérias seria notas[30][4]. Para acessar a nota do terceiro aluno na segunda matéria: notas[2][1] (lembrando que os índices começam em zero).

Arrays multidimensionais são usados em processamento de imagens (pixels em linhas e colunas), planilhas, jogos de tabuleiro, redes neurais e simulações científicas. O conceito é o mesmo do array simples, aplicado em mais dimensões.

Array vs lista ligada: quando usar cada um

Um array armazena elementos em posições contíguas de memória. Uma lista ligada armazena cada elemento em um nó independente, e cada nó aponta para o próximo. São duas abordagens diferentes para guardar coleções.

Arrays têm acesso rápido por índice (O(1)), mas inserções e remoções no meio são lentas (O(n)) porque exigem deslocar elementos. Listas ligadas têm inserções e remoções rápidas em qualquer posição (O(1) se você já tem o nó), mas acessar o elemento de índice k exige percorrer k nós desde o início (O(n)).

Na prática, a maioria das linguagens modernas oferece listas dinâmicas que combinam o melhor dos dois mundos — como ArrayList em Java, List em Python e List em Dart. Essas estruturas usam arrays internamente mas redimensionam automaticamente quando necessário, abstraindo a complexidade.

  • Array: acesso rápido por índice, tamanho fixo em linguagens de baixo nível.
  • Lista ligada: inserção e remoção rápidas em qualquer posição, sem realocação.
  • Lista dinâmica (ArrayList/List): array que cresce automaticamente. É o que você usa na maioria das situações.
  • Escolha pela operação mais frequente: se acessa muito por índice, prefira array. Se insere e remove muito no meio, prefira lista ligada.

Perguntas frequentes

Por que os índices de arrays começam em 0 e não em 1?

A convenção vem da linguagem C, onde um array é essencialmente um ponteiro para o início da memória alocada e o índice representa o deslocamento em bytes a partir desse ponto. O primeiro elemento está no deslocamento 0. Linguagens posteriores mantiveram a convenção por compatibilidade e eficiência. Algumas linguagens (como Lua e MATLAB) começam em 1, mas são exceção.

Posso ter um array de tipos diferentes?

Depende da linguagem. Em linguagens estaticamente tipadas como Java e C, todos os elementos de um array devem ser do mesmo tipo. Em linguagens dinâmicas como Python e JavaScript, uma lista pode misturar inteiros, strings e objetos. Mesmo nessas linguagens, é boa prática manter elementos do mesmo tipo em uma lista para evitar erros lógicos difíceis de depurar.

Qual a diferença entre tamanho e capacidade de um array?

Tamanho (size/length) é o número de elementos atualmente armazenados no array. Capacidade (capacity) é o espaço total alocado na memória, que pode ser maior que o tamanho. Listas dinâmicas geralmente alocam mais memória do que o necessário para evitar realocações frequentes — quando o tamanho atinge a capacidade, a lista cria um novo espaço maior e copia tudo para lá.

Este artigo foi útil para você?

Avalie com estrelas para nos ajudar a melhorar o conteúdo.

Faça login para avaliar este artigo.

Ainda tem dúvida?

O Professor IA explica passo a passo

Faça uma pergunta em linguagem natural e receba uma explicação personalizada sobre Lógica de Programação — ou qualquer outro tópico.

Prefere resolver pelo celular?

Baixar o app grátis →

Continue aprendendo