HashMap / Hashtable, LinkedHashMap e TreeMap
A ideia básica de um mapa é que ele mantenha associações de valores-chave (pares) para que você possa procurar um valor usando uma chave.
HashMap / Hashtable
O HashMap possui implementação baseada em uma tabela de hash. (Use essa classe em vez do Hashtable, que é uma classe herdada). O HashMap fornece um mapa não classificado e não ordenado. Quando você precisa de um mapa e não se importa com o pedido (quando itera), o HashMap é a escolha certa. As chaves do HashMap são como Set significa que nenhuma duplicação é permitida e desordenada, enquanto os valores podem ser qualquer objeto, mesmo nulo ou duplicado, também é permitido. O HashMap é muito semelhante ao Hashtable. A única diferença é que o Hashtable tem todo o método sincronizado para segurança do encadeamento, enquanto o HashMap possui métodos não sincronizados para obter melhor desempenho.
Podemos visualizar o HashMap como o diagrama abaixo, onde temos as chaves conforme o código hash e os valores correspondentes.

O HashMap fornece desempenho em tempo constante para inserir e localizar pares. O desempenho pode ser ajustado por meio de construtores que permitem definir a capacidade e o fator de carga da tabela de hash.
Construtores HashMap
HashMap ()
Construtor HashMap padrão (com capacidade padrão de 16 e fator de carga 0,75)
HashMap(Map<? extends KeyObject, ? extends ValueObject> m)
Isso é usado para criar o HashMap com base na implementação de mapa existente m.
HashMap(int capacidade)
Isso é usado para inicializar o HashMap com capacidade e fator de carga padrão.
HashMap(int capacidade, float carregaFator)
Isso é usado para inicializar o HashMap com capacidade e fator de carga personalizado.
As operações básicas do HashMap (put, get, containsKey, containsValue, size e is Empty) se comportam exatamente como suas contrapartes no Hashtable. O HashMap possui o método toString () substituído para imprimir os pares de valores-chave facilmente. O programa a seguir ilustra o HashMap. Mapeia nomes para salário. Observe como uma visualização de conjunto é obtida e usada.
import java.util.*;
public class ArmazenaSalarioFuncionario {
public static void main(String[] args) {