Pré-requisito: HashMap e TreeMap em Java
 

TreeMap, HashMap e LinkedHashMap: O que é semelhante?
 

  • Todos oferecem um mapa de chave-> valor e uma maneira de iterar através das chaves. A distinção mais importante entre essas classes é a garantia de tempo e a ordem das chaves.
  • Todas as três classes HashMap, TreeMap e LinkedHashMap implementam a interface java.util.Map e representam o mapeamento de uma chave exclusiva para valores.
     

Pontos chave
 

  1. HashMap: HashMap oferece 0 (1) consulta e inserção. No entanto, se você iterar pelas chaves, a ordem das chaves será essencialmente arbitrária. Ele é implementado por uma série de listas vinculadas. 
    Sintaxe: 
     
public class HashMap extends AbstractMap 
implements Map,Cloneable, Serializable
  • Um HashMap contém valores com base na chave.
  • Ele contém apenas elementos únicos.
  • Ele pode ter uma chave nula e vários valores nulos.
  • Não mantém nenhuma ordem .

2. LinkedHashMap: LinkedHashMap oferece 0 (1) consulta e inserção. As chaves são ordenadas por pedido de inserção. Ele é implementado por baldes duplamente vinculados. 
Sintaxe: 
 

public class LinkedHashMap extends HashMap 
implements Map
  • Um LinkedHashMap contém valores baseados na chave.
  • Ele contém apenas elementos únicos.
  • Ele pode ter uma chave nula e vários valores nulos.
  • É o mesmo que o HashMap, em vez disso, mantém a ordem de inserção .

3.TreeMap: TreeMap oferece pesquisa e inserção O (log N) . As chaves são ordenadas, portanto, se você precisar iterar pelas chaves na ordem de classificação, você pode. Isso significa que as chaves devem implementar a interface Comparable. TreeMap é implementado por uma árvore Red-Black. 
Sintaxe: 
 

public class TreeMap extends AbstractMap implements
NavigableMap, Cloneable, Serializable
  • Um TreeMap contém valores baseados na chave. Ele implementa a interface NavigableMap e estende a classe AbstractMap.
  • Ele contém apenas elementos únicos.
  • Ele não pode ter uma chave nula, mas pode ter vários valores nulos.
  • É o mesmo que o HashMap, em vez disso, mantém a ordem crescente (classificado usando a ordem natural de sua chave ).

4. Hashtable: “Hashtable” é o nome genérico para mapas baseados em hash. 
Sintaxe: 

public class Hashtable extends Dictionary implements
Map, Cloneable, Serializable
  • Um Hashtable é uma matriz de lista. Cada lista é conhecida como um balde. A posição do balde é identificada chamando o método hashcode(). Um Hashtable contém valores com base na chave.
  • Ele contém apenas elementos únicos.
  • Pode não ter nenhuma chave ou valor nulo.
  • Ele está sincronizado.
  • É uma classe legada.
// Java program to print ordering
// of all elements using HashMap
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
 
    // Driver method to test above method
    public static void main (String[] args)
    {
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        insertAndPrint(map);
    }
}
// Java program to print ordering
// of all elements using LinkedHashMap
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
     
    // Driver method to test above method
    public static void main (String[] args)
    {
        LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
        insertAndPrint(map);
    }
}
// Java program to print ordering of
// all elements using TreeMap
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Main
{
    // This function prints ordering of all elements
    static void insertAndPrint(AbstractMap<Integer, String> map)
    {
        int[] array= {1, -1, 0, 2,-2};
        for (int x: array)
        {
            map.put(x, Integer.toString(x));
        }
        for (int k: map.keySet())
        {
            System.out.print(k + ", ");
        }
    }
 
    // Driver method to test above method
    public static void main (String[] args)
    {
        TreeMap<Integer, String> map = new TreeMap<Integer, String>();
        insertAndPrint(map);
    }
}

Saída do HashMap: 
 

-1, 0, 1, -2, 2,     
// ordering of the keys is essentially arbitrary (any ordering)

Saída de LinkedHashMap: 
 

 1, -1, 0, 2, -2,     
// Keys are ordered by their insertion order

Saída de TreeMap: 
 

 -2, -1, 0, 1, 2,   
// Keys are in sorted order

Tabela de comparação
 

Aplicativos da vida real

  1. Suponha que você esteja criando um mapeamento de nomes para objetos Person. Você pode querer gerar periodicamente as pessoas em ordem alfabética por nome. Um TreeMap permite que você faça isso.
  2. Um TreeMap também oferece uma maneira de, dado um nome, produzir as próximas 10 pessoas. Isso pode ser útil para uma função “Mais” em muitos aplicativos.
  3. Um LinkedHashMap é útil sempre que você precisa da ordem de chaves para corresponder à ordem de inserção. Isso pode ser útil em uma situação de cache, quando você deseja excluir o item mais antigo.
  4. Geralmente, a menos que haja um motivo para não fazê-lo, você usaria o HashMap. Ou seja, se você precisar obter as chaves de volta no pedido de inserção, use LinkedHashMap. Se você precisar recuperar as chaves em sua ordem verdadeira / natural, use TreeMap. Caso contrário, HashMap provavelmente é o melhor. Normalmente é mais rápido e requer menos sobrecarga.

Este artigo foi contribuído pelo Sr. Somesh Awasthi . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.