🚀 Capítulo 06: Guardando os Pokémons (Tema: Pokémon)

NOTE

Este capítulo utiliza a temática de Pokémon para explicar as Coleções (Collections) em Java. Aprenda a guardar e organizar conjuntos de dados!


1. 🎯 Objetivo da Aula

Compreender o conceito de Coleções (Collections) em Java, aprendendo a usar as três estruturas mais famosas: List (Listas), Set (Conjuntos) e Map (Mapas/Dicionários).

2. 🏢 O Cenário Prático (Seu Desafio)

No universo Pokémon, um mestre treinador captura dezenas de monstrinhos diferentes durante a sua jornada. Para não virar uma bagunça, ele precisa guardá-los de forma organizada na sua Pokédex ou nas caixas do computador.

  • Se ele quer uma lista onde a ordem de captura importa e ele pode ter Pokémons repetidos (ex: ter Pikachus), ele usa uma List!
  • Se ele quer garantir que só tenha espécies únicas (sem repetição), ele usa um Set!
  • Se ele quer buscar um Pokémon diretamente pelo número dele na Pokédex, ele usa um Map (onde o número é a chave e o Pokémon é o valor).

No Java, nós não usamos variáveis comuns para guardar muitos dados juntos. Nós usamos o Framework de Collections! Seu desafio é organizar a sua Pokédex!


🧠 Fundamentos: A Teoria Traduzida

Para usar coleções em Java, nós precisamos dizer qual tipo de dado vai lá dentro usando os sinais de menor e maior < > (chamados de Generics).

📝 1. List (ArrayList):

É uma lista ordenada de elementos que aceita repetições.

import java.util.ArrayList;
import java.util.List;
 
public class ExemploList {
    public static void main(String[] args) {
        List<String> pokedex = new ArrayList<>();
        pokedex.add("Pikachu");
        pokedex.add("Charmander");
        pokedex.add("Pikachu"); // Aceita repetido!
    }
}

🚫 2. Set (HashSet):

É um conjunto de elementos que não aceita repetições. Se você tentar adicionar algo que já existe, ele apenas ignora.

import java.util.HashSet;
import java.util.Set;
 
public class ExemploSet {
    public static void main(String[] args) {
        Set<String> medalhas = new HashSet<>();
        medalhas.add("Rocha");
        medalhas.add("Cascata");
        medalhas.add("Rocha"); // O Java ignora este segundo!
    }
}

🗺️ 3. Map (HashMap):

Guarda pares de “Chave” e “Valor”. Você busca o valor através da chave!

import java.util.HashMap;
import java.util.Map;
 
public class ExemploMap {
    public static void main(String[] args) {
        Map<Integer, String> pokemonsPorNumero = new HashMap<>();
        pokemonsPorNumero.put(25, "Pikachu");
        pokemonsPorNumero.put(4, "Charmander");
        
        // Buscando o número 25:
        String p = pokemonsPorNumero.get(25); // Retorna "Pikachu"
    }
}

4. 📖 Exemplo Guiado: Listando a Equipe

Vamos criar uma lista com os Pokémons da nossa equipe e usar um loop para mostrar o nome de cada um:

import java.util.ArrayList;
import java.util.List;
 
public class EquipePokemon {
    public static void main(String[] args) {
        List<String> equipe = new ArrayList<>();
        equipe.add("Bulbasaur");
        equipe.add("Squirtle");
        equipe.add("Charmander");
 
        // Loop especial para ler listas (Foreach)
        for (String pokemon : equipe) {
            System.out.println("Eu escolho você, " + pokemon + "!");
        }
    }
}

5. 🛠️ Prática Obrigatória 1: Escolhendo a Coleção

Para cada situação abaixo, diga qual coleção (List, Set ou Map) seria a mais adequada para usar:

  1. Você quer guardar o histórico de compras de um cliente (a ordem das compras importa e ele pode comprar o mesmo item mais de uma vez).
  2. Você quer guardar a lista de CPFs dos clientes cadastrados (não pode haver CPF repetido de jeito nenhum).
  3. Você quer criar uma lista de produtos onde você digita o código de barras e o sistema te devolve o nome do produto.

6. 🛠️ Prática Obrigatória 2: Criando a Lista

  1. Escreva a linha de código em Java que cria uma lista (List) de números inteiros (Integer) chamada notas.

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 06 Java_Pokemon) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_java_e_springboot/
├── capitulos/
│   └── capitulo_06_pokemon.md

💡 Checkpoint de Lógica

Nas coleções do Java, nós não podemos usar tipos primitivos como int ou double dentro do < >. Precisamos usar as classes equivalentes (Wrappers), como Integer e Double!

10. 🔥 Desafio de Fixação

Pesquise qual é a diferença entre um ArrayList e um LinkedList no Java e em qual situação cada um é melhor.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. List (pois aceita duplicatas e mantém a ordem).
  2. Set (pois garante que não haverá duplicatas).
  3. Map (pois trabalha com o conceito de Chave e Valor). Gabarito da Prática 2:
  4. List<Integer> notas = new ArrayList<>();

Capitulo Anterior | Proximo Capitulo