Diferença entre HashMap e Hashtable em Java

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 5 Poderia 2024
Anonim
Diferença entre HashMap e Hashtable em Java - Tecnologia
Diferença entre HashMap e Hashtable em Java - Tecnologia

Contente


O HashMap e Hashtable, ambos são usados ​​para representar um grupo de objetos representados em par. Cada par é chamado Entrada objeto. o coleção of Entries é referido pelo objeto HashMap e Hashtable. As chaves em uma coleção devem ser exclusivas ou distintas. A diferença entre o HashMap e o Hashtable é que HashMap implementa particularmente a interface do mapa, enquanto que o Hashtable estende a classe Dictionary (classe herdada), que é reengenharia para implementar a interface Map. A outra diferença importante é que os objetos do HashMap são não sincronizado considerando que os objetos do Hashtable são sincronizado.

Vamos ver o gráfico de comparação mostrado abaixo para aprender mais algumas diferenças entre o HashMap e o Hashtable.


  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Semelhanças
  5. Conclusão

Gráfico de comparação

Base para ComparaçãoHashMapHashtable
Implementar / EstenderA classe HashMap implementa a interface Map e estende uma classe AbstractMap.O Hashtable estende a classe Dictionary Legacy, mas foi reprojetado e agora também implementa a interface Map.
SincronizaçãoO HashMap não está sincronizado e, portanto, o objeto HashMap não é seguro para threads.O Hashtable é sincronizado e, portanto, o objeto do Hashtable é seguro para threads.
Chaves / ValorUma chave pode retornar o Nulo apenas uma vez, mas um valor pode retornar Nulo a qualquer número de vezes.Uma chave não pode retornar Nulo, pois é usada para obter o código de hash que será usado como um índice da tabela de hash, nem um valor pode retornar Nulo.
Capacidade inicial padrãoA capacidade inicial padrão do HashMap é 16.A capacidade inicial padrão do Hashtable é 11.
AtravessandoO HashMap é percorrido pelo Iterator.Como a classe Map, o Hashtable também não suporta diretamente o Iterator para atravessar e, portanto, ele usa o Enumerator.


Definição de HashMap

HashMap é uma classe que implementa o Mapa interface e estende o AbstractMap A classe usa a tabela de hash. O objeto do HashMap refere-se a uma coleção / conjunto de par em que cada chave é mapeada para um valor específico. As chaves em uma coleção devem ser exclusivas, pois são usadas para recuperar o valor. Por outro lado, os valores em uma coleção podem ser duplicados. A declaração da classe HashMap e construtores da classe HashMapclass são os seguintes:

/ * K representa a chave e V representa o valor * / class HashMap / * Construtores da classe HashMap * / HashMap () HashMap (O mapa <? Estende K,? Estende V> m) HashMap (capacidade int) HashMap (capacidade int, float fillRatio)

O primeiro construtor é um construtor padrão que inicializa um objeto vazio do HashMap com uma capacidade padrão de 16 e taxa de preenchimento padrão de 0,75. O segundo construtor inicializa o mapa de hash com o valor de m. O terceiro construtor cria um mapa de hash com a capacidade inicial correspondente ao valor fornecido no argumento "capacidade". O quarto construtor inicializa o mapa de hash com uma capacidade e uma proporção de preenchimento fornecidas nos parâmetros. vamos aprender agora como alimentar as entradas em um mapa de hash.

Hashmap hm = novo Hashmap (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordânia", 200); System.out.ln (hm); / * output * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordânia = 200}

No código acima, você pode ver que eu criei um objeto HashMap vazio hm com capacidade inicial padrão e taxa de preenchimento padrão. Em seguida, inseri quatro entradas no mapa de hash usando o método put (K, V) que mapeia a chave para o valor. Você pode observar que as entradas não são editadas em uma sequência que você as alimenta porque a ordem de inserção não é fixa. Agora, considere um caso em que você já tenha uma entrada no mapa de hash e depois disso você tenta inserir put (K1, V5), ou seja, tenta mapear a mesma chave com um valor diferente. Em seguida, o método put substituirá o valor antigo V1 pelo novo valor V2 e retornará o valor antigoV1; caso contrário, se nunca tentarmos substituir o valor de uma chave, o método put retornará Nulo para essa chave.

Definição de Hashtable

Hashtable é uma classe que estende o Dicionário classe que é uma classe herdada e é reengenharia para implementar o Mapa interface. O Hashtable usa a tabela de hash como sua estrutura de dados. O Hashtable é semelhante ao HashMap, pois aqui também o objeto do Hashtable se refere à coleção de entradas em que cada entrada é um par de . Todas as chaves em uma coleção devem ser exclusivas, por outro lado, os valores podem ser duplicados. As chaves são usadas particularmente para obter o valor do código hash que decide o índice, onde o par será armazenado em uma tabela de hash. Em uma tabela de hash, nem uma chave nem um valor podem retornar um ponteiro nulo. Vamos ver a declaração da classe Hashtable e construtores da classe hashtable.

/ * K especifica a chave e V especifica o valor associado à chave * / class Hashtable / * construtores de Hashtable * / Hashtable () Hashtable (tamanho int) Hashtable (tamanho int, float fillRatio) Hashtable (Mapa <? estende K,? estende V> m)

No código acima, o primeiro construtor é um construtor padrão que cria um objeto vazio de uma classe Hashtable, seu tamanho padrão é 11 e a taxa de preenchimento padrão é 0,75. O segundo construtor cria uma tabela de hash com o tamanho correspondente ao valor fornecido no parâmetro "tamanho". O terceiro construtor cria uma tabela de hash com um tamanho e uma proporção de preenchimento fornecidos no parâmetro O quarto construtor inicializa a tabela de hash com o valor m. Vamos agora aprender a inserir o par na tabela de hash.

Hashtable ht = new Hashtable (); ht.put (novo hashCode (2), 275); ht.put (novo hashCode (12), 250); ht.put (novo hashCode (16), 150); ht.put (novo hashCode (8), 200); System.out.ln (ht); / * saída * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

No código acima, criei um objeto vazio do Hashtable e inseri quatro entradas usando o método put (). Dentro do método put, chamei hashCode () que calcula e retorna o valor do código hash, que atuará como o valor do índice do objeto de entrada. Como você pode ver, não mencionei o tamanho da tabela de hash; portanto, por padrão, será 11. Aqui também, a ordem de inserção não é preservada e, portanto, quando as entradas ed não aparecem em sequência, elas são alimentadas.

  1. O HashMap implementa Mapa interface e estende uma classe abstrata, AbstractMap enquanto que o Hashtable estende a classe abstrata Dicionário, que também é uma classe Legacy, reestruturada posteriormente para implementar Mapa interface.
  2. O objeto HashMap é não sincronizado ou seja, vários threads podem operar nele ao mesmo tempo e, portanto, objetos que não são seguros para threads. Por outro lado, os objetos do Hashtable são sincronizado ou seja, se um encadeamento deseja operar em um objeto do Hashtable, ele precisa adquirir um bloqueio nesse objeto para que nenhum outro encadeamento possa acessar esse objeto e, portanto, é seguro para encadeamento.
  3. No HashMap, a chave pode retornar Nulo apenas uma vez, e o valor pode retornar Nulo várias vezes. Por outro lado, uma chave nunca pode retornar Nulo, pois era usada para obter o valor do código de hash que é usado como um índice para armazenar o par e nem um valor pode retornar nulo.
  4. A capacidade padrão de uma tabela de hash na classe HashMap é 16 Considerando que, a capacidade padrão de uma tabela de hash no Hashtable é 11.
  5. o Iterador pode atravessar entradas do Hashmap. Por outro lado, o Hashtable não suporta diretamente o iterador e, portanto, geralmente Enumerador é usado para percorrer as entradas no Hashtable.

Semelhanças:

  • HashMap e Hashtable usam a estrutura de dados do tabela de hash.
  • HashMap e Hashtable ambos implementam Mapa interface
  • O pedido de inserção não é preservado no HashMap e no Hashtable e com base no código de hash obtido usando as chaves.
  • No HashMap e Hashtable, as chaves devem ser único enquanto que os valores podem ser duplicado.
  • HashMap e Hashtable podem conter objetos heterogêneos para chaves e valores.
  • HashMap e Hashtable, ambos implementos Serializable e Clonável interfaces mas não, acesso aleatório.
  • HashMap e Hashtable ambos têm taxa de preenchimento padrão 0.75.
  • HashMap e Hashtable são os melhores para recuperação ou procurando operações.

Conclusão:

O HashMap tem melhor desempenho, pois seus objetos não são sincronizados e vários threads podem operar nele ao mesmo tempo e, portanto, é mais rápido que o Hashtable.