Recomendado, 2024

Escolha Do Editor

Diferença entre HashMap e LinkedHashMap em Java

HashMap e LinkedHashMap são as classes, bastante semelhantes entre si e são usadas para criar um mapa. A classe HashMap estende a classe AbstractMap para usar uma tabela de hash para armazenar os elementos no mapa. A classe LinkedHashMap mantém as entradas no mapa com base em seu pedido de inserção. O recurso que distingue HashMap e LinkedHashMap um do outro é que o Hashmap não mantém a ordem das entradas armazenadas em um mapa. Por outro lado, LinkedHashMap usa uma estrutura de dados híbrida para manter a ordem das entradas nas quais elas foram inseridas. No gráfico de comparação abaixo, explorei algumas outras diferenças entre HashMap e LinkedHashMap.

Gráfico de comparação

Base para ComparaçãoHashMapLinkedHashMap
BasicA ordem de inserção no HashMap não é preservada.A ordem de inserção é preservada no LinkedHashMap.
Estrutura de dadosO HashMap usa o HashTable para armazenar mapas.LinkedHashMap usa HashTable junto com a lista vinculada para armazenar o mapa.
Estende / ImplementaO HashMap estende o AbstractMap e implementa a interface Map.LinkedHashMap estende o Hashmap.
VersãoO HashMap foi introduzido no JDK 2.0.O LinkedHashMap foi introduzido no JDK 4.0.
A sobrecargaComparativamente menos sobrecarga.Comparativamente mais sobrecarga porque tem que manter a ordem das entradas do mapa.

Definição de HashMap

HashMap é uma classe usada para criar um mapa. Implementa a interface do mapa . Ele também estende a classe AbstractMap para que possa usar uma tabela de hash para armazenar as entradas no mapa. Entradas do mapa é um par onde cada chave está associada ao valor. A chave na entrada é usada para recuperar o valor, portanto, a chave deve ser exclusiva. É por isso que chaves duplicadas não são permitidas no HashMap. Mas a chave em cada entrada do mapa pode ter um tipo diferente, isto é, as chaves no mapa criadas pelo HashMap podem ser heterogêneas. A estrutura de dados usada pelo HashMap para armazenar um mapa é uma tabela de hash.

A ordem de inserção das entradas no HashMap não é preservada. A inserção de entradas no mapa criado usando o HashMap é baseada no código de hash calculado pelas chaves nas entradas. Se por engano você inserir uma chave duplicada no HashMap, ela substituirá o valor anterior dessa chave pelo novo valor proposto e retornará o valor antigo. Se nenhuma chave duplicada for usada e nenhuma substituição tiver ocorrido, a chave sempre retornará Nulo. Vamos ver como adicionar as entradas ao mapa de hash com o exemplo a seguir.

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

Como no código acima, você pode ver que criei um objeto do HashMap e adicionei as entradas usando o método puts e quando imprimi o objeto HashMap, as entradas não são impressas na ordem em que foram inseridas. Portanto, você não pode fingir que a ordem das entradas no HashMap retornará. O HashMap usa todos os métodos da interface Map e da classe AbstractMap e não introduz nenhum método novo; tem seus próprios construtores. A capacidade padrão do mapa hash é 16 e a taxa de preenchimento padrão é 0, 75 .

Definição de LinkedHashMap

LinkedHashMap também é um uso de classe para criar um mapa. O LinkedHashMap estende a classe HashMap e foi introduzido posteriormente no HashMap no JDK versão 4.0. Ser a classe filha da classe HashMap LinkedHashMap é exatamente igual à classe HashMap, incluindo os construtores e métodos. Mas, LinkedHashMap difere no sentido de que mantém a ordem da inserção das entradas no mapa. A estrutura de dados usada pelo LinkedHashMap para armazenar o mapa é uma lista vinculada e uma tabela de hash .

Além dos métodos herdados pelo HashMap, LinkedHashMap introduz um novo método que é removeEldestEntry () . Este método é usado para remover a entrada mais antiga no mapa. A capacidade padrão do LinkedHashMap é 16 e a taxa de preenchimento padrão é 0, 75, que também é semelhante à classe HashMap.

Principais diferenças entre HashMap e LinkedHashMap em Java

  1. A diferença mais importante é que a ordem de inserção do HashMap não é preservada, enquanto a ordem de inserção do LinkedHashMap é preservada .
  2. A estrutura de dados usada pelo HashMap para armazenar os elementos do mapa é Hashtable . Por outro lado, a estrutura de dados usada pelo LinkedHashMap é Lista vinculada e Hashtable .
  3. A classe HashMap estende a classe AbstractMap e implementa a interface Map . No entanto, a classe LinkedHashMap é uma classe filha da classe HashMap, isto é, a classe LinkedHashMap estende a classe HashMap.
  4. A classe HashMap foi introduzida na versão 2.0 do JDK . A classe LinkedHashMap foi introduzida posteriormente na versão 4.0 do JDK .
  5. Comparativamente, a classe LinkedHashMap tem mais sobrecarga do que o HashMap, pois precisa manter a ordem dos elementos inseridos no mapa.

Conclusão:

O LinkedHashMap deve ser usado somente onde estamos preocupados com a seqüência dos elementos inseridos no mapa.

Top