Pular para o conteúdo principal
Módulo 4 · Lição 2 de 28/14 no curso~15 min
Lições do módulo (2/2)

Coleções e ArrayList

Os arrays tradicionais em Java possuem um tamanho fixo definido no momento da criação. Para trabalhar com listas de dados cujo tamanho pode variar dinamicamente, Java fornece o Java Collections Framework. A classe mais comumente usada é ArrayList.

A classe ArrayList e os genéricos

ArrayList implementa um array redimensionável na memória. Para declarar um ArrayList, devemos especificar o tipo de elementos que ele conterá, colocando-o entre colchetes angulares < >. Esse recurso é chamado de Genéricos.

Para usar ArrayList, devemos importá-lo no início do arquivo de java.util.ArrayList.

Declaração e instanciação:

Java
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Métodos principais

Aqui estão as operações fundamentais em um ArrayList:

  1. add(element): Adiciona um elemento ao final da lista.
  2. get(index): Retorna o elemento no índice especificado (indexado 0).
  3. size(): Retorna o número de elementos atualmente na lista.
  4. remove(index): Remove o elemento no índice especificado.
Java
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"

Iterando em uma lista (para cada)

O loop for-each é a estrutura ideal para iterar todos os elementos de uma coleção:

Java
for (String item : shoppingList) {
    System.out.println(item);
}

Array vs ArrayList: memória e desempenho

Embora ArrayList seja muito mais flexível que um array estático, ele vem com compensações de desempenho e memória:

  • Static Array: É alocado em um bloco contíguo de memória, possui tamanho fixo e o acesso aos elementos via índice é extremamente rápido. Ele armazena tipos primitivos diretamente, sem sobrecarga.
  • ArrayList: Internamente, gerencia um array que é redimensionado (criando um novo array maior e copiando elementos antigos) quando sua capacidade inicial (geralmente 10) é excedida. Além disso, armazena apenas referências de objetos, introduzindo sobrecarga de memória para cada elemento.

Autoboxing e Unboxing

Como ArrayList só pode conter objetos, Java executa automaticamente conversões entre tipos primitivos e suas respectivas classes wrapper:

  • Autoboxing: conversão automática de um tipo primitivo para uma classe wrapper. Por exemplo, quando você escreve numbers.add(42), Java converte automaticamente 42 (int) em Integer.valueOf(42) (inteiro).
  • Unboxing: conversão automática de uma classe wrapper para um tipo primitivo. Por exemplo, quando você executa int num = numbers.get(0), Java converte internamente Integer em int.

Experimente você mesmo

Exercício#java.m4.l2.e1
Tentativas: 0Carregando…

Importe ArrayList, declare um ArrayList de nomes nomeados de String. Adicione Alice e Bob à lista e imprima seu tamanho usando o método size().

Carregando editor…
Mostrar dica

Inclua `import java.util.ArrayList;` no topo. Crie a lista com `ArrayList<String>names = new ArrayList<>();`, adicione os elementos e imprima seu tamanho com `names.size()`.

Solução disponível após 3 tentativas

Exercício#java.m4.l2.e2
Tentativas: 0Carregando…

Declare um ArrayList de números nomeados inteiros, adicione o número 42 e imprima-o recuperando-o no índice 0 usando get().

Carregando editor…
Mostrar dica

Use `ArrayList<Integer> numbers = new ArrayList<>();` (com a classe wrapper Integer) e imprima-o com `System.out.println(numbers.get(0));`.

Solução disponível após 3 tentativas

Exercício#java.m4.l2.e3
Tentativas: 0Carregando…

Declare um ArrayList de String nomeado cores. Adicione as cores Vermelho, Verde e Azul à lista. Por fim, use um loop for-each para percorrer a lista e imprimir cada cor na tela.

Carregando editor…
Mostrar dica

Declare a lista com `ArrayList<String> cores = new ArrayList<>();`, adicione as três cores e use um loop `for (String c : cores)` para imprimi-las usando `System.out.println(c);`.

Solução disponível após 3 tentativas