Diferença entre HashMap e LinkedHashMap

HashMap e LinkedHashMap são duas das implementações de mapa mais comuns e de uso geral na plataforma Java. Eles são basicamente classes baseadas em hash, bastante semelhantes entre si e são usadas para criar um mapa. A interface do Mapa é a última das principais interfaces do Framework de Coleções, que define as operações suportadas por um conjunto de associações de chave para valor nas quais as chaves são exclusivas. Essas implementações de mapas são baseadas em um algoritmo de hash. Enquanto a classe HashMap implementa mapas não ordenados, a classe LinkedHashMap implementa mapas ordenados. A implementação LinkedHashMap é uma subclasse da classe HashMap, o que significa que ela herda os recursos da classe HashMap. Não há muita diferença entre os dois em termos de desempenho. Vamos dar uma olhada.

O que é o HashMap? 

O HashMap é uma das implementações de uso geral mais comuns da interface Map em Java, com base em um algoritmo de hash. É análogo à classe definida HashSet, embora os elementos não sejam ordenados nas duas classes. Ele é implementado como uma tabela de hash, mas, diferentemente do LinkedHashMap, não mantém nenhuma ordem em chaves ou valores. Em geral, o HashMap fornece desempenho em tempo constante para o put and get. A classe não é segura para threads, mas permite uma chave nula e vários valores nulos. Como não mantém uma ordem de iteração, requer menos memória.

O que é o LinkedHashMap?

O LinkedHashMap está entre as quatro implementações de uso geral da interface Map, que é uma subclasse da classe HashMap, o que significa que ele herda seus recursos. Embora seja muito semelhante ao HashMap em termos de desempenho, exceto que mantém a ordem de inserção das chaves, na ordem em que as chaves são inseridas no Mapa ou na ordem em que as entradas são acessadas no Mapa. Ele refina o contrato de sua classe pai, garantindo a ordem na qual os iteradores retornam seus elementos. No entanto, requer mais memória que um HashMap porque mantém uma lista duplamente vinculada em Java.

Diferença entre HashMap e LinkedHashMap

  1. Noções básicas do HashMap vs. LinkedHashMap

O HashMap é uma implementação baseada em hash da interface Map em Java. Os mapas são uma coleção de pares de valores-chave e são usados ​​quando Listas estão na coleção ordenada. HashMap é uma classe Collection que armazena valor em pares chave-valor. Em termos simples, ele mapeia chaves para valores, o que significa que pode localizar um valor com base em uma chave. LinkedHashMap é uma implementação de lista vinculada da interface Map, assim como o HashMap, exceto que mantém ordens de elementos inseridos nela. É uma subclasse do HashMap que herda seus recursos. O LinkedHashMap refina o contrato de sua classe pai, HashMap, garantindo a ordem na qual os iteradores retornam seus elementos.

  1. Ordem de Iteração

A principal diferença entre HashMap e LinkedHashMap é a ordem. Os elementos de um HashMap não estão em ordem, totalmente aleatórios, enquanto os elementos do LinkedHashMap estão ordenados. As entradas de um LinkedHashMap estão na ordem de inserção de chave, que é a ordem na qual as chaves são inseridas no Mapa. Isso significa que a primeira chave inserida no mapa é enumerada primeiro, o mesmo acontece com o valor associado a ela e a última entrada inserida por último enumerada. O LinkedHashMap possui uma ordem de iteração previsível, o que significa que também pode manter seus elementos na ordem de acesso, que é a ordem na qual as entradas são acessadas.

  1. Implementação

As classes HashMap e LinkedHashMap usam hash para implementar a interface Map em Java, exceto que o HashMap é implementado como uma tabela de hash, enquanto o LinkedHashMap mantém uma lista duplamente vinculada de Buckets executando todas as suas entradas. É por isso que o LinkedHashMap requer mais memória que o HashMap porque, diferentemente do HashMap, ele mantém um pedido. Ele remove a ordem caótica do HashMap, sem incorrer no custo adicional que teria sido incorrido com o TreeMap. Além disso, a classe LinkedHashMap é muito semelhante à classe HashMap em muitos aspectos, como sincronização e chaves / valores nulos, pois ambos permitem uma chave nula e vários valores nulos..

  1. Desempenho para o HashMap vs. LinkedHashMap

Embora ambas as classes ofereçam desempenho comparável, acredita-se que a classe HashMap seja a escolha preferida se a encomenda não for um problema, pois não garante a ordem de iteração do mapa. Operações como adicionar, remover ou localizar entradas com base em uma chave são de tempo constante, pois elas fazem o hash da chave. Portanto, adicionar, remover e localizar entradas em um LinkedHashMap pode ser um pouco mais lento que em um HashMap, pois mantém uma lista duplamente vinculada de Buckets em Java. Além disso, o HashMap requer menos memória que o LinkedHashMap porque nenhuma ordem é mantida.

HashMap vs. LinkedHashMap: gráfico de comparação

Resumo do HashMap vs. LinkedHashMap

Embora as classes HashMap e HashMap tenham desempenho quase semelhante, o HashMap requer menos memória que um LinkedHashMap porque não garante a ordem de iteração do mapa, o que torna a adição, remoção e localização de entradas em um HashMap relativamente mais rápidas do que fazer o mesmo com um LinkedHashMap. No entanto, a principal diferença entre os dois é a ordem: os elementos de um HashMap não estão em ordem, enquanto os elementos de um LinkedHashMap estão na ordem de inserção de chaves por padrão, significando a ordem na qual as chaves são inseridas no mapa. O LinkedHashMap também pode manter seus elementos na ordem de acesso, ou seja, a ordem na qual as entradas são acessadas. Como no LinkedHashMap, uma lista duplamente vinculada deve ser mantida, tem menos desempenho que o HashMap.