Diferencias entre TreeMap, HashMap y LinkedHashMap en Java

Requisito previo: HashMap y TreeMap en Java
 

TreeMap, HashMap y LinkedHashMap: ¿Qué es similar?
 

  • Todos ofrecen un mapa clave->valor y una forma de iterar a través de las claves. La distinción más importante entre estas clases son las garantías de tiempo y el orden de las llaves.
  • Las tres clases HashMap, TreeMap y LinkedHashMap implementan la interfaz java.util.Map y representan la asignación de clave única a valores.
     

Puntos clave
 

  1. HashMap: HashMap ofrece búsqueda e inserción 0(1) . Sin embargo, si itera a través de las claves, el orden de las claves es esencialmente arbitrario. Se implementa mediante una array de listas enlazadas. 
    Sintaxis: 
     
public class HashMap extends AbstractMap 
implements Map,Cloneable, Serializable
  • Un HashMap contiene valores basados ​​en la clave.
  • Contiene sólo elementos únicos.
  • Puede tener una clave nula y múltiples valores nulos.
  • No mantiene ningún orden .

2. LinkedHashMap: LinkedHashMap ofrece búsqueda e inserción 0(1) . Las claves están ordenadas por su orden de inserción. Se implementa mediante cubos doblemente vinculados. 
Sintaxis: 
 

public class LinkedHashMap extends HashMap 
implements Map
  • Un LinkedHashMap contiene valores basados ​​en la clave.
  • Contiene sólo elementos únicos.
  • Puede tener una clave nula y múltiples valores nulos.
  • Es lo mismo que HashMap, pero mantiene el orden de inserción .

3.TreeMap: TreeMap ofrece búsqueda e inserción O(log N) . Las claves están ordenadas, por lo que si necesita iterar a través de las claves en orden, puede hacerlo. Esto significa que las claves deben implementar la interfaz Comparable. TreeMap se implementa mediante un árbol rojo-negro. 
Sintaxis: 
 

public class TreeMap extends AbstractMap implements
NavigableMap, Cloneable, Serializable
  • Un TreeMap contiene valores basados ​​en la clave. Implementa la interfaz NavigableMap y extiende la clase AbstractMap.
  • Contiene sólo elementos únicos.
  • No puede tener una clave nula, pero puede tener varios valores nulos.
  • Es lo mismo que HashMap, pero mantiene un orden ascendente (Ordenado usando el orden natural de su clave ).

4. Hashtable: «Hashtable» es el nombre genérico de los mapas basados ​​en hash. 
Sintaxis: 

public class Hashtable extends Dictionary implements
Map, Cloneable, Serializable
  • Un Hashtable es una array de lista. Cada lista se conoce como un cubo. La posición del depósito se identifica llamando al método hashcode(). Una tabla hash contiene valores basados ​​en la clave.
  • Contiene sólo elementos únicos.
  • Es posible que no tenga ninguna clave o valor nulo.
  • Está sincronizado.
  • Es una clase heredada.

HashMap

// 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);
    }
}

LinkedHashMap

// 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);
    }
}

TreeMap

// 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);
    }
}

Salida de HashMap: 
 

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

Salida de LinkedHashMap: 
 

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

Salida de TreeMap: 
 

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

Tabla de comparación
 

Aplicaciones de la vida real

  1. Suponga que está creando una asignación de nombres a objetos Person. Es posible que desee mostrar periódicamente a las personas en orden alfabético por nombre. Un TreeMap le permite hacer esto.
  2. Un TreeMap también ofrece una forma de, dado un nombre, dar salida a las próximas 10 personas. Esto podría ser útil para una función «Más» en muchas aplicaciones.
  3. Un LinkedHashMap es útil siempre que necesite el orden de las claves para que coincida con el orden de inserción. Esto puede ser útil en una situación de almacenamiento en caché, cuando desea eliminar el elemento más antiguo.
  4. Generalmente, a menos que haya una razón para no hacerlo, usaría HashMap. Es decir, si necesita recuperar las claves en orden de inserción, use LinkedHashMap. Si necesita recuperar las claves en su orden real/natural, utilice TreeMap. De lo contrario, HashMap es probablemente lo mejor. Por lo general, es más rápido y requiere menos gastos generales.

Este artículo es una contribución del Sr. Somesh Awasthi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *