Diferenças entre HashMap e HashTable em Java

Publicados: 2021-06-02

Se 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.