HashMap
A classe HashMap faz parte das Java Collections e permite armazenar dados no formato Chave, Valor. Ou seja, cada objeto armazenado numa HashMap tem uma chave que o identifica univocamente dentro da HashMap.
Um objeto do tipo HashMap pode ter valores repetidos mas as chaves têm de ser únicas. Quer as chaves quer os valores são objetos.
A classe HashMap pode ser encontrada no package java.util.
Estrutura de um HashMap
Um objeto do tipo HashMap é composto por :
- Um objeto do tipo Set chamado keySet que é o conjunto das chaves existentes no HashMap. Neste objeto, não podem existir elementos repetidos
- Um objeto do tipo Set chamado entrySet que é o conjunto dos pares chave, valor existentes no HashMap. Neste objeto, não podem existir elementos repetidos
- Um objeto do tipo Collection chamado values que é o conjunto dos valores existentes no HashMap. Neste objeto podem existir elementos repetidos.
Criação de um HashMap
// import the HashMap class
import java.util.HashMap;
//HashMap que guarda objetos do tipo Carro sendo as chaves string
HashMap<String, Carro> carros = new HashMap<String, Carro>();
//HashMap que guarda strings, sendo as chaves strings
HashMap<String, String> capitais = new HashMap<String, String>();
//HashMap que guarda objetos do tipo Aluno sendo as chaves numeros inteiros
HashMap<Integer, Aluno> carros = new HashMap<Integer, Aluno>();
Tamanho de um HashMap()
Obtemos o tamanho de um HashMap com o método size().
capitais.size();
Adicionar objetos a um HashMap
Adicionamos objetos a um HashMap com o método put(), indicando a chave e o objeto a adicionar.
// Importa a classe HashMap:
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// Cria um objeto HashMap chamado capitais;
HashMap<String, String> capitais = new HashMap<String, String>();
// Adiciona chaves e valores (Pais, Capital)
capitais.put("England", "London");
capitais.put("Germany", "Berlin");
capitais.put("Norway", "Oslo");
capitais.put("USA", "Washington DC");
System.out.println(capitais);
}
}
Obter um objeto de um HashMap
Obtemos um objeto de um HashMap com o método get(), usando a chave do objeto.
String capital = capitais.get("England");
Modificar um objeto num HashMap
Podemos modificar um objeto num HashMap de duas formas:
Com o método put():
Devemos indicar a chave e o novo objeto.
String old = capitais.put("England", "Liverpool");
O método put() retorna o valor antes da alteração.
Com o método replace():
Devemos indicar a chave e o novo objeto.
String old = capitais.replace("England", "Liverpool");
O método replace() retorna o valor antes da alteração.
Remover um objeto
Para removermos um valor de um HashMap usamos o método remove() e a chave do objeto:
capitais.remove("England");
Verificar se uma chave existe
Para verificarmos se um HashMap contém uma determinada chave, usamos o método containsKey() e a chave que queremos verificar se existe. Este método retorna true se a chave existir e false se não existir:
if(!capitais.containsKey("Italy")){
capitais.put("Italy", "Rome");
}
Verificar se um valor existe
Para verificarmos se um HashMap contém um determinado valor, usamos o método containsValue() e o objeto que queremos verificar se existe. Este método retorna true se existir pelo menos um valor e false se não existir:
if(!capitais.containsValue("London")){
System.out.println("London exists in hashmap");
}
Eliminar todas as entradas de um HashMap
Podemos eliminar todos os objetos de um HashMap com o método clear():
capitais.clear();
Verificar se um HashMap está vazio
Podemos verificar se um HashMap está vazio com o método isEmpty():
if(capitais.isEmpty()){
System.out.println("hashmap vazio");
}
Percorrer um HashMap
Percorrer as chaves
A partir do keySet podemos ter acesso às chaves do HashMap e, com estas, aos respetivos valores:
for (String key : capitais.keySet()) {
System.out.println("key: " + key + " value: " + capitais.get(key));
}
Percorrer os valores
A partir dos values() podemos ter acesso direto aos objetos (valores) armazenados no HashMap:
for (String value : capitais.values()) {
System.out.println(value);
}
