Uma Lista de Dicionários é uma combinação de duas estruturas de dados poderosas:
ArrayList (lista) e HashMap (dicionário). É um ArrayList onde cada elemento é um HashMap.
Sintaxe:
ArrayList<HashMap<String, String>> lista = new ArrayList<>();
Lê-se: "ArrayList de HashMaps que têm String como chave e String como valor"
Quando usar? Quando você precisa armazenar múltiplos registros com vários campos. Por exemplo: lista de produtos, cadastro de pessoas, catálogo de livros, etc.
⚠ Regra importante — chaves uniformes: numa lista de dicionários bem estruturada,
todos os HashMaps da lista devem usar exatamente as mesmas chaves.
Se o primeiro HashMap tem as chaves "nome", "idade" e "cidade",
todos os outros também devem ter essas mesmas chaves — assim o for consegue iterar
a lista e chamar .get("nome") em qualquer elemento sem erro.
Chaves diferentes em cada dicionário quebram a consistência da estrutura.
Vamos criar uma lista de pessoas, onde cada pessoa é um HashMap com nome, idade e cidade:
import java.util.ArrayList;
import java.util.HashMap;
public class ListaPessoas {
public static void main(String[] args) {
// Criando ArrayList de HashMap
ArrayList<HashMap<String, String>> pessoas = new ArrayList<>();
// Criando primeira pessoa
HashMap<String, String> pessoa1 = new HashMap<>();
pessoa1.put("nome", "Ana Silva");
pessoa1.put("idade", "25");
pessoa1.put("cidade", "São Paulo");
pessoas.add(pessoa1);
// Criando segunda pessoa
HashMap<String, String> pessoa2 = new HashMap<>();
pessoa2.put("nome", "Bruno Costa");
pessoa2.put("idade", "30");
pessoa2.put("cidade", "Rio de Janeiro");
pessoas.add(pessoa2);
// Criando terceira pessoa
HashMap<String, String> pessoa3 = new HashMap<>();
pessoa3.put("nome", "Carlos Souza");
pessoa3.put("idade", "28");
pessoa3.put("cidade", "Belo Horizonte");
pessoas.add(pessoa3);
// Exibindo a lista — funciona porque TODAS as pessoas têm as mesmas chaves
System.out.println("=== LISTA DE PESSOAS ===");
for (int i = 0; i < pessoas.size(); i++) {
HashMap<String, String> pessoa = pessoas.get(i);
System.out.println("Pessoa " + (i + 1) + ":");
System.out.println("Nome: " + pessoa.get("nome"));
System.out.println("Idade: " + pessoa.get("idade"));
System.out.println("Cidade: " + pessoa.get("cidade"));
}
System.out.println("Total de pessoas: " + pessoas.size());
}
}
=== LISTA DE PESSOAS ===
Pessoa 1:
Nome: Ana Silva
Idade: 25
Cidade: São Paulo
Pessoa 2:
Nome: Bruno Costa
Idade: 30
Cidade: Rio de Janeiro
Pessoa 3:
Nome: Carlos Souza
Idade: 28
Cidade: Belo Horizonte
Total de pessoas: 3
Vamos criar um catálogo de produtos com nome, preço e categoria:
import java.util.ArrayList;
import java.util.HashMap;
public class CatalogoProdutos {
public static void main(String[] args) {
ArrayList<HashMap<String, String>> produtos = new ArrayList<>();
// Produto 1: Notebook
HashMap<String, String> produto1 = new HashMap<>();
produto1.put("nome", "Notebook Dell");
produto1.put("preco", "3500.00");
produto1.put("categoria", "Informática");
produtos.add(produto1);
// Produto 2: Mouse
HashMap<String, String> produto2 = new HashMap<>();
produto2.put("nome", "Mouse Logitech");
produto2.put("preco", "80.00");
produto2.put("categoria", "Informática");
produtos.add(produto2);
// Produto 3: Cadeira
HashMap<String, String> produto3 = new HashMap<>();
produto3.put("nome", "Cadeira Gamer");
produto3.put("preco", "1200.00");
produto3.put("categoria", "Móveis");
produtos.add(produto3);
// Exibindo catálogo formatado — funciona porque TODOS os produtos têm as mesmas chaves
System.out.println("=== CATÁLOGO DE PRODUTOS ===");
System.out.println("PRODUTO\t\t\tPREÇO\t\tCATEGORIA");
System.out.println("------------------------------------------------");
for (HashMap<String, String> produto : produtos) {
System.out.printf("%-20s\tR$ %s\t%s\n",
produto.get("nome"),
produto.get("preco"),
produto.get("categoria"));
}
// Calculando total
double total = 0;
for (HashMap<String, String> produto : produtos) {
total += Double.parseDouble(produto.get("preco"));
}
System.out.println("------------------------------------------------");
System.out.printf("TOTAL:\t\t\tR$ %.2f\n", total);
}
}
=== CATÁLOGO DE PRODUTOS ===
PRODUTO PREÇO CATEGORIA
------------------------------------------------
Notebook Dell R$ 3500.00 Informática
Mouse Logitech R$ 80.00 Informática
Cadeira Gamer R$ 1200.00 Móveis
------------------------------------------------
TOTAL: R$ 4780.00
Sistema de biblioteca com livros, autores e anos:
import java.util.ArrayList;
import java.util.HashMap;
public class Biblioteca {
public static void main(String[] args) {
ArrayList<HashMap<String, String>> livros = new ArrayList<>();
// Adicionando livros — todos com as mesmas 4 chaves: titulo, autor, ano, genero
HashMap<String, String> livro1 = new HashMap<>();
livro1.put("titulo", "1984");
livro1.put("autor", "George Orwell");
livro1.put("ano", "1949");
livro1.put("genero", "Ficção");
livros.add(livro1);
HashMap<String, String> livro2 = new HashMap<>();
livro2.put("titulo", "Dom Casmurro");
livro2.put("autor", "Machado de Assis");
livro2.put("ano", "1899");
livro2.put("genero", "Romance");
livros.add(livro2);
HashMap<String, String> livro3 = new HashMap<>();
livro3.put("titulo", "O Senhor dos Anéis");
livro3.put("autor", "J.R.R. Tolkien");
livro3.put("ano", "1954");
livro3.put("genero", "Fantasia");
livros.add(livro3);
// Exibindo biblioteca
System.out.println("=== BIBLIOTECA ===");
for (int i = 0; i < livros.size(); i++) {
HashMap<String, String> livro = livros.get(i);
System.out.println("Livro " + (i + 1) + ":");
System.out.println(" Título: " + livro.get("titulo"));
System.out.println(" Autor: " + livro.get("autor"));
System.out.println(" Ano: " + livro.get("ano"));
System.out.println(" Gênero: " + livro.get("genero"));
}
// Buscando livro por autor
String autorBusca = "Machado de Assis";
System.out.println("=== LIVROS DE " + autorBusca + " ===");
for (HashMap<String, String> livro : livros) {
if (livro.get("autor").equals(autorBusca)) {
System.out.println("- " + livro.get("titulo") + " (" + livro.get("ano") + ")");
}
}
}
}
=== BIBLIOTECA ===
Livro 1:
Título: 1984
Autor: George Orwell
Ano: 1949
Gênero: Ficção
Livro 2:
Título: Dom Casmurro
Autor: Machado de Assis
Ano: 1899
Gênero: Romance
Livro 3:
Título: O Senhor dos Anéis
Autor: J.R.R. Tolkien
Ano: 1954
Gênero: Fantasia
=== LIVROS DE Machado de Assis ===
- Dom Casmurro (1899)
Teste seus conhecimentos sobre Lista de Dicionários em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: