AFF Education Construa seu Futuro

Aula 58 - Lista de Dicionários

O que é uma Lista de Dicionários?

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.

Exemplo Básico: Lista de Pessoas

Vamos criar uma lista de pessoas, onde cada pessoa é um HashMap com nome, idade e cidade:

ArrayList<HashMap>  pessoas  = {  pessoa1,  pessoa2,  pessoa3  }
[
pessoas.get(0)
pessoa1
"nome"
"Ana Silva"
"idade"
"25"
"cidade"
"São Paulo"
›
pessoas.get(1)
pessoa2
"nome"
"Bruno Costa"
"idade"
"30"
"cidade"
"Rio de Janeiro"
›
pessoas.get(2)
pessoa3
"nome"
"Carlos Souza"
"idade"
"28"
"cidade"
"Belo Horizonte"
]
↑ todas as chaves são iguais em cada dicionário: "nome", "idade", "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

Exemplo: Catálogo de Produtos

Vamos criar um catálogo de produtos com nome, preço e categoria:

ArrayList<HashMap>  produtos  = {  produto1,  produto2,  produto3  }
[
produtos.get(0)
produto1
"nome"
"Notebook Dell"
"preco"
"3500.00"
"categoria"
"Informática"
›
produtos.get(1)
produto2
"nome"
"Mouse Logitech"
"preco"
"80.00"
"categoria"
"Informática"
›
produtos.get(2)
produto3
"nome"
"Cadeira Gamer"
"preco"
"1200.00"
"categoria"
"Móveis"
]
↑ todas as chaves são iguais em cada dicionário: "nome", "preco", "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

Exemplo: Biblioteca de Livros

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)

Exercícios

Teste seus conhecimentos sobre Lista de Dicionários em Java:

1. O que é uma Lista de Dicionários?

2. Qual é a sintaxe correta para declarar uma lista de dicionários?

3. Como acessar o valor "nome" do primeiro dicionário em ArrayList<HashMap<String, String>> pessoas?

4. Quando é mais apropriado usar Lista de Dicionários?

5. Como adicionar um novo dicionário a uma lista de dicionários chamada produtos?

6. Por que numa lista de dicionários todos os HashMaps devem ter as mesmas chaves?

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Uma lista de dicionários em Java pode ser representada por qual tipo?

2. Para acessar o valor da chave "nome" do primeiro dicionário lista.get(0), usa-se: