Logo Olavo Moreira
Trabalhando com Collections - Java

Trabalhando com Collections - Java

January 13, 2026
5 min read
Table of Contents
index
Disclaimer

O conteúdo desse estudo foi feito durante o Curso de Desenvolvimento Java, lecionado pela Giuliana Silva Bezerra.

Aconselho veemente que você utilize este material como um complemento ao curso, e não como substituto do mesmo. A didática dela é incrível e você aprenderá muito mais seguindo o curso oficial.

Introdução

No desenvolvimento de software, frequentemente precisamos gerenciar grupos de objetos relacionados.

Em Java, as Collections fornecem uma maneira poderosa e flexível de armazenar, organizar e manipular esses grupos. Neste artigo, exploraremos os principais tipos de Collections em Java e como utilizá-los efetivamente.

Arrays vs Collections

ArraysCollections
Tamanho fixoTamanho dinâmico
Trabalham com tipos primitivosTrabalham com objetos
Poucos métodos utilitáriosMuitos métodos prontos (add, remove, sort, etc.)
// Array (tamanho fixo)
String[] nomes = new String[3];
// Collection (tamanho cresce automaticamente)
List<String> nomes = new ArrayList<>();

O ArrayList aumenta sua capacidade automaticamente quando necessário.

Interface List e ArrayList

ArrayList é a implementação mais usada da interface List.

List<String> frutas = new ArrayList<>();

Por que declarar como List?

Boa prática de orientação a interfaces, você pode trocar a implementação depois sem mudar o resto do código.

List<String> frutas = new LinkedList<>(); // Troca fácil

➕ Adicionando elementos

List<String> nomes = new ArrayList<>();
nomes.add("Ana");
nomes.add("Bruno");
nomes.add("Carlos");

Inicializando já com valores:

List<String> nomes = new ArrayList<>(Arrays.asList("Ana", "Bruno", "Carlos"));

List.of() cria uma lista imutável, então usamos new ArrayList<>(…) para torná-la mutável.

🔍 Acessando elementos (GET)

List<String> nomes = new ArrayList<>(Arrays.asList("Ana", "Bruno", "Carlos"));
System.out.println(nomes.get(0)); // Ana

⚠ Se acessar um índice inválido:

nomes.get(10); // IndexOutOfBoundsException

✏️ Inserir e Atualizar

Inserir em posição específica

nomes.add(1, "Beatriz"); // Insere "Beatriz" na posição` 1

Atualizar elemento

nomes.set(2, "Carla"); // Atualiza índice 2 para "Carla"

❌ Remover

Remover por valor:

nomes.remove("Bruno"); // Remove por valor

Remover por índice:

nomes.remove(0); // Remove por índice

📏 Tamanho da lista

int tamanho = nomes.size(); // Retorna o tamanho da lista

🔁 Percorrendo a lista

Podemos percorrer usando for tradicional, foreach ou streams:

🔹For tradicional

List<String> nomes = new ArrayList<>(Arrays.asList("Ana", "Bruno", "Carlos"));
for (int i = 0; i < nomes.size(); i++) {
System.out.println(nomes.get(i));
}

🔹For-each

for (String nome : nomes) {
System.out.println(nome);
}

🔹forEach com lambda

nomes.forEach(nome -> System.out.println(nome));

🔹Usando Iterator

Útil quando precisa remover durante a iteração.

Iterator<String> it = nomes.iterator();
while (it.hasNext()) {
String nome = it.next();
if (nome.equals("Bruno")) {
it.remove();
}
}

🔄 Ordenando a lista

Collections.sort(nomes); // Ordena em ordem alfabética

Ordem reversa

Collections.sort(nomes, Collections.reverseOrder());

Ordenar objetos por campo

nomes.sort(Comparator.comparing(String::length));

🔄 Conversão entre Array e List

Array → List

String[] array = {"A", "B", "C"};
List<String> lista = new ArrayList<>(Arrays.asList(array));

List → Array

String[] novoArray = lista.toArray(new String[0]);

🗺 Trabalhando com Map e HashMap

Map armazena dados no formato chave → valor.

Map<String, String> usuarios = new HashMap<>();

➕ Adicionar elementos

usuarios.put("joao", "João Silva");
usuarios.put("maria", "Maria Souza");

🔍 Buscar valor pela chave

System.out.println(usuarios.get("joao"));

✏️ Atualizar valor

usuarios.put("joao", "João Pereira"); // substitui o valor antigo

❌ Remover

usuarios.remove("maria");

📏 Tamanho do Map

int tamanho = usuarios.size();

🔁 Iterando no Map

🔹Apenas chaves

for (String chave : usuarios.keySet()) {
System.out.println(chave);
}

🔹Apenas valores

for (String valor : usuarios.values()) {
System.out.println(valor);
}

🔹Chave e valor (mais completo)

for (Map.Entry<String, String> entry : usuarios.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}

🧠 Quando usar cada estrutura?

EstruturaUse quando…
ArrayListPrecisa de lista com acesso rápido por índice
LinkedListMuitas inserções/remoções no meio (raro na prática)
HashSetNão quer elementos repetidos
HashmMapPrecisa buscar valores rapidamente por chave

Resumão Brabo

  • ✔ Collections são dinâmicas
  • ✔ List mantém ordem e permite repetidos
  • ✔ Map trabalha com chave única → valor
  • ✔ ArrayList e HashMap são as implementações mais usadas
  • ✔ Sempre prefira declarar pela interface (List, Map)