Java HashMap e ÁrvoreMapa ambas são classes da estrutura Java Collections. A implementação do Java Map geralmente atua como uma tabela hash agrupada. Quando os buckets ficam muito grandes, eles são transformados em nós de TreeNodes , cada um estruturado de forma semelhante aos de java.util.TreeMap .
HashMap
Implementos HashMap Mapa, Clonável e Serializável interface. Ele se estende ResumoMapa aula. Isso pertence a java.util pacote.
- HashMap contém valor baseado na chave.
- Pode ter uma única chave nula e vários valores nulos.
- HashMap não mantém a ordem durante a iteração.
- Ele contém elementos únicos.
- Funciona com base no princípio do hash.
ÁrvoreMapa
A classe TreeMap se estende ResumoMapa classe e implementos Mapa Navegável , Clonável , e Serializável interface. TreeMap é um exemplo de ClassificadoMapa . É implementado pela árvore Vermelho-Preto, o que significa que a ordem das chaves é ordenada.
- TreeMap também contém valores baseados na chave.
- TreeMap é classificado por chaves.
- Ele contém elementos únicos.
- Não pode ter uma chave nula, mas vários valores nulos.
- As chaves estão em ordem crescente.
- Ele armazena o objeto na estrutura em árvore.
Semelhanças entre HashMap e TreeMap
- Ambas as classes se estendem ResumoMapa aula.
- Um mapa é um objeto que armazena valor chave pares. No par chave-valor, cada chave é única, mas seus valores podem ser duplicado .
- Ambas as classes representam o mapeamento de chave para valores .
- Ambos os mapas não são sincronizado .
- Uso do mapa colocar() método para adicionar um elemento no mapa.
- O iterador lança um ConcurrentModificationException se o mapa for modificado de alguma forma.
A principal diferença entre HashMap e TreeMap é:
HashMap não preserva a ordem da iteração enquanto o ÁrvoreMapa preservar a ordem usando o compareTo() método ou um comparador definido no construtor do TreeMap.
A tabela a seguir descreve as diferenças entre HashMap e TreeMap.
Base | HashMap | ÁrvoreMapa |
---|---|---|
Definição | Java HashMap é uma implementação baseada em hashtable da interface Map. | Java ÁrvoreMapa é uma implementação baseada em estrutura de árvore da interface Map. |
Implementos de Interface | Implementos HashMap Mapa, Clonável , e Serializável interface. | Implementos TreeMap Mapa Navegável, Clonável , e Serializável interface. |
Chaves/valores nulos | HashMap permite um solteiro chave nula e múltiplo valores nulos. | TreeMap não permite nulo chaves, mas pode ter múltiplo valores nulos. |
Homogêneo / Heterogêneo | HashMap permite elementos heterogêneos porque não realiza classificação em chaves. | TreeMap permite valores homogêneos como chave devido à classificação. |
Desempenho | HashMap é mais rápido do que TreeMap porque fornece desempenho em tempo constante que é O(1) para operações básicas como get() e put(). | TreeMap é lento em comparação com HashMap porque fornece o desempenho de O(log(n)) para a maioria das operações como add(), remove() e contains(). |
Estrutura de dados | A classe HashMap usa o tabela hash . | TreeMap usa internamente um Vermelho preto tree, que é uma árvore de pesquisa binária com auto-equilíbrio. |
Método de comparação | Ele usa é igual a() método do Objeto classe para comparar chaves. O método equals() da classe Map o substitui. | Ele usa o compareTo() método para comparar chaves. |
Funcionalidade | A classe HashMap contém apenas funções básicas como get(), put(), KeySet() , etc. | A classe TreeMap é rica em funcionalidades, pois contém funções como: tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry() . |
Ordem dos elementos | HashMap não mantém nenhuma ordem. | Os elementos são classificados em ordem natural (ascendente). |
Usos | O HashMap deve ser usado quando não precisamos do par chave-valor na ordem de classificação. | O TreeMap deve ser usado quando exigirmos um par de valores-chave em ordem classificada (crescente). |
Exemplo de HashMap vs TreeMap
No exemplo a seguir, podemos observar que os elementos do HashMap estão em ordem aleatória enquanto os elementos do TreeMap estão organizados em ordem crescente.
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
Saída: