Gráfico de comparação
Base para Comparação | HashMap | LinkedHashMap |
---|---|---|
Basic | A ordem de inserção no HashMap não é preservada. | A ordem de inserção é preservada no LinkedHashMap. |
Estrutura de dados | O HashMap usa o HashTable para armazenar mapas. | LinkedHashMap usa HashTable junto com a lista vinculada para armazenar o mapa. |
Estende / Implementa | O HashMap estende o AbstractMap e implementa a interface Map. | LinkedHashMap estende o Hashmap. |
Versão | O HashMap foi introduzido no JDK 2.0. | O LinkedHashMap foi introduzido no JDK 4.0. |
A sobrecarga | Comparativamente 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
- 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 .
- 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 .
- 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.
- 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 .
- 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.