Um HashMap é uma estrutura de dados que armazena pares de chave-valor. É como um dicionário onde você procura uma palavra (chave) e encontra seu significado (valor).
Características do HashMap:
Analogia: Pense em um HashMap como uma agenda telefônica, onde o nome é a chave e o telefone é o valor.
Vamos criar nosso primeiro HashMap:
import java.util.HashMap;
public class PrimeiroHashMap {
public static void main(String[] args) {
// Criando HashMap<String, String> (chave: String, valor: String)
HashMap<String, String> capitais = new HashMap<>();
// Adicionando pares chave-valor com put()
capitais.put("Brasil", "Brasília");
capitais.put("Argentina", "Buenos Aires");
capitais.put("Chile", "Santiago");
capitais.put("Peru", "Lima");
capitais.put("Uruguai", "Montevidéu");
// Exibindo o HashMap completo
System.out.println("HashMap de capitais:");
System.out.println(capitais);
// Acessando valores pela chave com get()
System.out.println("\nCapital do Brasil: " + capitais.get("Brasil"));
System.out.println("Capital da Argentina: " + capitais.get("Argentina"));
System.out.println("Capital do Chile: " + capitais.get("Chile"));
// Tamanho do HashMap
System.out.println("\nTotal de países: " + capitais.size());
}
}
HashMap de capitais:
{Brasil=Brasília, Chile=Santiago, Peru=Lima, Uruguai=Montevidéu, Argentina=Buenos Aires}
Capital do Brasil: Brasília
Capital da Argentina: Buenos Aires
Capital do Chile: Santiago
Total de países: 5
Vamos explorar os métodos mais importantes:
import java.util.HashMap;
public class MetodosHashMap {
public static void main(String[] args) {
HashMap<String, Integer> idades = new HashMap<>();
// 1. put(chave, valor) - adiciona ou atualiza
idades.put("Ana", 25);
idades.put("Bruno", 30);
idades.put("Carlos", 28);
System.out.println("HashMap inicial: " + idades);
// 2. get(chave) - obtém o valor
int idadeAna = idades.get("Ana");
System.out.println("\nIdade da Ana: " + idadeAna);
// 3. containsKey(chave) - verifica se a chave existe
System.out.println("\nContém 'Bruno'? " + idades.containsKey("Bruno"));
System.out.println("Contém 'Diana'? " + idades.containsKey("Diana"));
// 4. containsValue(valor) - verifica se o valor existe
System.out.println("\nContém idade 30? " + idades.containsValue(30));
System.out.println("Contém idade 40? " + idades.containsValue(40));
// 5. remove(chave) - remove o par chave-valor
idades.remove("Carlos");
System.out.println("\nApós remover Carlos: " + idades);
// 6. size() - retorna o tamanho
System.out.println("Tamanho: " + idades.size());
// 7. isEmpty() - verifica se está vazio
System.out.println("Está vazio? " + idades.isEmpty());
// 8. clear() - limpa tudo
idades.clear();
System.out.println("\nApós clear(): " + idades);
System.out.println("Está vazio agora? " + idades.isEmpty());
}
}
HashMap inicial: {Ana=25, Bruno=30, Carlos=28}
Idade da Ana: 25
Contém 'Bruno'? true
Contém 'Diana'? false
Contém idade 30? true
Contém idade 40? false
Após remover Carlos: {Ana=25, Bruno=30}
Tamanho: 2
Está vazio? false
Após clear(): {}
Está vazio agora? true
Existem várias formas de percorrer um HashMap:
for-each percorrendo o
resultado de emails.keySet() — apenas as
chaves do HashMap. A cada iteração, nome
recebe a próxima chave (ex.: "João",
"Maria", "Pedro"); o valor
associado pode ser obtido com emails.get(nome).
import java.util.HashMap;
public class PercorrerHashMap {
public static void main(String[] args) {
HashMap<String, String> emails = new HashMap<>();
emails.put("João", "joao@email.com");
emails.put("Maria", "maria@email.com");
emails.put("Pedro", "pedro@email.com");
// Forma 1: Percorrer apenas as chaves
System.out.println("=== Forma 1: Apenas chaves ===");
for (String nome : emails.keySet()) {
System.out.println(nome);
}
// Forma 2: Percorrer apenas os valores
System.out.println("\n=== Forma 2: Apenas valores ===");
for (String email : emails.values()) {
System.out.println(email);
}
// Forma 3: Percorrer chaves e valores
System.out.println("\n=== Forma 3: Chaves e valores ===");
for (String nome : emails.keySet()) {
String email = emails.get(nome);
System.out.println(nome + " → " + email);
}
// Forma 4: Usando entrySet()
System.out.println("\n=== Forma 4: entrySet() ===");
for (var entry : emails.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
}
}
=== Forma 1: Apenas chaves ===
João
Maria
Pedro
=== Forma 2: Apenas valores ===
joao@email.com
maria@email.com
pedro@email.com
=== Forma 3: Chaves e valores ===
João → joao@email.com
Maria → maria@email.com
Pedro → pedro@email.com
=== Forma 4: entrySet() ===
João → joao@email.com
Maria → maria@email.com
Pedro → pedro@email.com
HashMap pode usar diferentes tipos para chaves e valores:
import java.util.HashMap;
public class HashMapTipos {
public static void main(String[] args) {
// HashMap<String, Integer> - preços de produtos
HashMap<String, Double> precos = new HashMap<>();
precos.put("Notebook", 3500.00);
precos.put("Mouse", 80.00);
precos.put("Teclado", 250.00);
System.out.println("=== PREÇOS ===");
for (String produto : precos.keySet()) {
System.out.printf("%s: R$ %.2f\n", produto, precos.get(produto));
}
// HashMap - matrícula e nome
HashMap<Integer, String> alunos = new HashMap<>();
alunos.put(101, "Ana Silva");
alunos.put(102, "Bruno Costa");
alunos.put(103, "Carlos Souza");
System.out.println("\n=== ALUNOS ===");
for (Integer matricula : alunos.keySet()) {
System.out.println("Matrícula " + matricula + ": " + alunos.get(matricula));
}
// HashMap - status de tarefas
HashMap<String, Boolean> tarefas = new HashMap<>();
tarefas.put("Estudar Java", true);
tarefas.put("Fazer exercícios", false);
tarefas.put("Revisar conteúdo", true);
System.out.println("\n=== TAREFAS ===");
for (String tarefa : tarefas.keySet()) {
String status = tarefas.get(tarefa) ? "✓ Concluída" : "✗ Pendente";
System.out.println(tarefa + ": " + status);
}
}
}
=== PREÇOS ===
Notebook: R$ 3500.00
Mouse: R$ 80.00
Teclado: R$ 250.00
=== ALUNOS ===
Matrícula 101: Ana Silva
Matrícula 102: Bruno Costa
Matrícula 103: Carlos Souza
=== TAREFAS ===
Estudar Java: ✓ Concluída
Fazer exercícios: ✗ Pendente
Revisar conteúdo: ✓ Concluída
Vamos criar uma agenda telefônica completa usando HashMap:
import java.util.HashMap;
import java.util.Scanner;
public class AgendaTelefonica {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
HashMap<String, String> agenda = new HashMap<>();
while (true) {
System.out.println("\n=== AGENDA TELEFÔNICA ===");
System.out.println("1. Adicionar contato");
System.out.println("2. Buscar telefone");
System.out.println("3. Remover contato");
System.out.println("4. Listar todos");
System.out.println("5. Sair");
System.out.print("Escolha: ");
int opcao = entrada.nextInt();
entrada.nextLine();
if (opcao == 1) {
System.out.print("Nome: ");
String nome = entrada.nextLine();
System.out.print("Telefone: ");
String telefone = entrada.nextLine();
agenda.put(nome, telefone);
System.out.println("Contato adicionado!");
} else if (opcao == 2) {
System.out.print("Nome: ");
String nome = entrada.nextLine();
if (agenda.containsKey(nome)) {
System.out.println("Telefone: " + agenda.get(nome));
} else {
System.out.println("Contato não encontrado!");
}
} else if (opcao == 3) {
System.out.print("Nome: ");
String nome = entrada.nextLine();
if (agenda.remove(nome) != null) {
System.out.println("Contato removido!");
} else {
System.out.println("Contato não encontrado!");
}
} else if (opcao == 4) {
if (agenda.isEmpty()) {
System.out.println("Agenda vazia!");
} else {
System.out.println("\n=== CONTATOS ===");
for (String nome : agenda.keySet()) {
System.out.println(nome + ": " + agenda.get(nome));
}
}
} else if (opcao == 5) {
System.out.println("Até logo!");
break;
}
}
entrada.close();
}
}
=== AGENDA TELEFÔNICA ===
1. Adicionar contato
2. Buscar telefone
3. Remover contato
4. Listar todos
5. Sair
Escolha: 1
Nome: João
Telefone: 99999-1234
Contato adicionado!
| Método | Descrição | Exemplo |
|---|---|---|
put(chave, valor) |
Adiciona ou atualiza par | map.put("Ana", 25) |
get(chave) |
Retorna o valor da chave | map.get("Ana") |
remove(chave) |
Remove o par chave-valor | map.remove("Ana") |
containsKey(chave) |
Verifica se tem a chave | map.containsKey("Ana") |
containsValue(valor) |
Verifica se tem o valor | map.containsValue(25) |
size() |
Retorna o tamanho | map.size() |
isEmpty() |
Verifica se está vazio | map.isEmpty() |
clear() |
Remove todos os pares | map.clear() |
keySet() |
Retorna conjunto de chaves | map.keySet() |
values() |
Retorna coleção de valores | map.values() |
Teste seus conhecimentos sobre HashMap em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: