Diferenças entre HashMap e HashTable em Java
Publicados: 2021-06-02Se você está aprendendo sobre Java e seus aplicativos, deve ter se deparado com HashMap e HashTable. Ambos estão entre as classes mais importantes no framework Java Collection. Você os usará extensivamente durante o desenvolvimento com Java, e é por isso que é vital entender suas diferenças.
Nos pontos a seguir, abordaremos o tópico HashTable vs HashMap em detalhes e explicaremos as distinções entre os dois:
Índice
O que é HashMap?
HashMap está na coleção do Java desde a introdução do Java 1.2. Ele permite que você execute implementações básicas da interface Map de Java. HashMap armazena dados em pares (Chave, Valor) e para acessá-los, você terá que usar um índice de outro tipo, como um inteiro.
Aqui, você usa um objeto como chave (índice) para outro objeto (valor), daí o uso do par (chave, valor). Se você adicionar uma chave duplicada, ela substituirá o elemento da chave correspondente.
Recursos do HashMap
Para entender as distinções entre HashTable e HashMap, primeiro, você deve entender seus recursos. Isso faria com que você se familiarizasse com o básico de ambos. HashMap tem os seguintes recursos:
- Faz parte do pacote java.util.
- Ele estende uma classe abstrata AbstractMap que fornece uma implementação incompleta da interface Map.
- Junto com a implementação da interface Map, ele também implementa interfaces Serializable e Cloneable.
- Ele permite valores duplicados, mas não permite chaves duplicadas. Isso significa que uma chave não pode ter mais de um valor, mas várias chaves podem ter um único valor.
- Você pode usar a chave nula apenas uma vez em um HashMap, mas pode usar vários valores nulos.
- Ele não oferece garantias sobre a ordem do mapa, principalmente se a ordem permaneceria constante ao longo do tempo. HashMap é quase semelhante ao HashTable, mas não está sincronizado.
- HashSet usa HashMap internamente.
O que é HashTable?
Você usa a classe HashTable para implementar uma tabela de hash que mapeia chaves para valores. Aqui, você pode usar objetos não nulos como chave ou valor. Tenha em mente que para armazenar e recuperar objetos de uma tabela de hash com sucesso, os objetos que você usou como chaves devem implementar o método hashCode e o método equals.
Uma tabela de hash armazena dados em um formato de matriz e cada valor de dados tem um valor de índice exclusivo. Isso permite que você acesse dados específicos rapidamente se você souber o índice necessário.
Recursos do HashTable
HashTable tem suas características peculiares, assim como HashMap. No entanto, esses recursos o tornam único e diferente do HashMap em muitos aspectos:
- HashTable é bastante semelhante ao HashMap, mas é sincronizado.
- Ele armazena pares de valores-chave em uma tabela de hash.
- Aqui, você especifica um objeto usado como chave e o valor que deseja associar ao mesmo. Então você faz o hash da chave e usa o código de hash gerado como o índice onde você armazena o valor dentro da tabela.
- A capacidade padrão da classe Hashtable é 11 e o fator de carga é 0,75.
- HashMap não oferece enumeração, enquanto Hashtable não oferece enumeração rápida.
Diferenças entre HashMap e HashTable
Agora que você conhece os destaques específicos de HashMap e HashTable, agora vamos compará-los e ver as diferenças proeminentes entre os dois:
HashMap | Tabela de hash |
É não sincronizado. Você não pode compartilhar muitos encadeamentos aqui sem usar o código de sincronização adequado porque não é seguro para encadeamentos. | Está sincronizado. Você pode compartilhá-lo com muitos encadeamentos porque é seguro para encadeamentos. |
Ele herda a classe AbstractMap. | Ele herda a classe Dicionário. |
Aqui, o Iterator é rápido. | Em HashTable, o Enumerator não é rápido. |
O Iterator percorre o HashMap. | O Enumerator e o Iterator percorrem a HashTable. |
Você pode fazer um HashMap sincronizado chamando o código Mapa m = Collections.synchronisedMap(hashMap); | As tabelas de hash são sincronizadas internamente e você não pode dessincronizá-las com nenhum código. |
É bastante rápido. | É relativamente mais lento que o HashMap. |
HashMap é uma nova classe e foi introduzida recentemente no JDK 1.2. | HashTable é uma classe herdada. |
Ele permite vários valores nulos e uma chave nula. | Ele não permite nenhum valor nulo ou chave. |
Exemplo de codificação
A seguir está um exemplo de HashMap e HashTable no trabalho para que você possa entender as distinções de HashMap vs HashTable.
Entrada:
import java.util.*;
import java.lang.*;
import java.io.*;
classe pública JavaTester{
public static void main(String args[]){
Hashtable ht=new Hashtable();
ht.put(1,"Uday");
ht.put(1,"Ujjwal");
ht.put(2,"Enviar");
ht.put(3,"Vijay");
System.out.println(“————-Tabela de hash————–“);
Set<Integer> keySet = ht.keySet();
for (chave inteira:keySet) {
System.out.println(chave + ” “+ht.get(chave));
}
HashMap hm=novo HashMap();
hm.put(0,"Uday");
hm.put(4,"Uday"); // você pode ter valores duplicados em um hashmap
hm.put(1,"Sumit");
hm.put(2,"Vijay");
System.out.println(“———–Mapa de hash———–“);
Set<Integer> keySet1 = ht.keySet();
for (chave inteira:keySet) {
System.out.println(chave + ” “+hm.get(chave));
}
}
}
Saída:
Tabela de hash:
3 Vijay
2 Cúpula
1 Ujjwal
Mapa de hash:
0 dia
1 Cúpula
2 Vijay
4 dias
Quando usar HashMap vs HashTable?
O principal fator que determina se você usará HashMap ou HashTable é a sincronização. Se você precisar de uma tarefa thread-safe, deverá usar HashTable porque todos os seus métodos são sincronizados. No entanto, é uma classe herdada e você deve evitá-los.
Se você tiver um ambiente multithread, deve usar ConcurrentHashMap, pois é bastante semelhante a HashTable. Ele permite que você faça o HashMap sincronizado corretamente.
As operações sincronizadas causam baixo desempenho, portanto, você deve evitá-las na maioria dos casos. Além disso, o HashMap é adequado para um ambiente não encadeado, para que você possa usá-lo facilmente.
Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
Conclusão
HashMap e HashTable são códigos Java populares com funções semelhantes. No entanto, como você pode ver, existem várias diferenças importantes entre os dois. HashMap é uma classe Java, enquanto HashTable é uma estrutura de dados.
Se você estiver interessado em aprender mais sobre Java e outras linguagens de programação, recomendamos verificar nosso Programa PG Executivo em Desenvolvimento de Software com Especialização em Desenvolvimento Full Stack .
O que é uma tabela de hash?
A tabela de hash é uma estrutura de dados de contêiner amplamente usada na programação de computadores. As tabelas de hash são usadas para armazenar pares chave-valor, onde a chave pode ser qualquer objeto. Como um contêiner, uma tabela de hash deve suportar as operações de inserção e remoção. Como uma ferramenta de pesquisa, uma tabela de hash deve suportar a operação de get. Se uma tabela de hash deve ser uma estrutura de dados de dicionário, ela também deve suportar a operação de contém. Assim, em geral, uma tabela de hash é uma estrutura de dados amplamente utilizada para implementar efetivamente as operações de inserir, remover, obter e conter. A tabela de hash é amplamente utilizada devido ao seu rápido desempenho.
O que é framework de coleções em Java?
Java Collections Framework é um conjunto de interfaces, classes e algoritmos para a plataforma Java. Faz parte da Plataforma Java desde a versão 1.2. Ele inclui interfaces para contêineres, listas, filas e assim por diante, mas também inclui classes para lidar com datas e horas, uma classe para lidar com expressões regulares, outra para lidar com internacionalização e ainda outra para lidar com a pesquisa em arquivos.
Qual é a relação entre uma tabela de hash e um mapa de hash em Java?
Uma tabela de hash é uma estrutura de dados especial que associa chaves a valores. As chaves podem ser qualquer objeto, mas todas as chaves em uma determinada tabela de hash devem ser comparáveis entre si (ou seja, usar as mesmas interfaces ou interfaces compatíveis). Em Java, um mapa é um tipo específico de tabela de hash implementado usando um TreeMap. As chaves em um mapa devem implementar um método equals e o mapa usa esse método para determinar se duas chaves são iguais ou não. Isso significa que apenas as chaves são armazenadas no mapa e seu valor associado é calculado sempre que necessário.