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); 
}