Diferencia entre tabla hash y mapa sincronizado en Java

La clase Hashtable implementa una tabla hash, que asigna claves a valores. Cualquier objeto no nulo se puede utilizar como clave o como valor. Para almacenar y recuperar con éxito objetos de una tabla Hash, los objetos utilizados como claves deben implementar el método hashCode y también el método equals.  

Características de la tabla hash:

  • Es algo así como HashMap pero está sincronizado.
  • Hashtable almacena el par clave/valor en la tabla hash.
  • En Hashtable especificamos un objeto que se usa como clave y el valor que queremos asociar con esa clave. A continuación, se aplica un hash a la clave y el código hash resultante se utiliza como índice en el que se almacena el valor dentro de la tabla.
  • La capacidad predeterminada inicial de la clase Hashtable es 11, mientras que el factor de carga es 0,75.
  • HashMap no proporciona ninguna enumeración, mientras que Hashtable no proporciona una enumeración rápida.

Ejemplo:

Java

// Java program to demonstrate the
// usage of HashTable
  
import java.util.*;
class Hashtable1 {
    public static void main(String args[])
    {
        // Creating a HashTable
        Hashtable<Integer, String> mytable = new Hashtable<Integer, String>();
  
        // Adding elements to HashTable
        mytable.put(1, "James Bond");
        mytable.put(2, "Donald Trumph");
        mytable.put(3, "Joe Biden");
        mytable.put(4, "Mona Lisa");
  
        // Iterating through HashTable
        for (Map.Entry m : mytable.entrySet()) 
        {
            System.out.println(m.getKey() + " "
                               + m.getValue());
        }
    }
}
Producción

4 Mona Lisa
3 Joe Biden
2 Donald Trumph
1 James Bond

SynchronizedHashMap

  • Sincronización a nivel de Objeto.
  • Cada operación de lectura/escritura necesita adquirir un bloqueo.
  • Bloquear toda la colección es una sobrecarga de rendimiento.
  • Básicamente, esto da acceso a un solo hilo a todo el mapa y bloquea todos los demás hilos.
  • Puede causar contención.
  • SynchronizedHashMap devuelve Iterator, que falla rápidamente en la modificación simultánea.

Ejemplo:

Java

// Java program to demonstrate the
// usage of Synchronized HashMap
  
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapSyncExample {
    public static void main(String args[])
    {
        // Creating HashMap
        HashMap<Integer, String> hmap = new HashMap<Integer, String>();
        
        // Adding elements in HashMap
        hmap.put(2, "Anil");
        hmap.put(44, "Ajit");
        hmap.put(1, "Brad");
        hmap.put(4, "Sachin");
        hmap.put(88, "XYZ");
  
        Map map = Collections.synchronizedMap(hmap);
        Set set = map.entrySet();
        
        synchronized (map)
        {
            Iterator i = set.iterator();
            
            // Display elements
            while (i.hasNext())
            {
                Map.Entry me = (Map.Entry)i.next();
                System.out.print(me.getKey() + ": ");
                System.out.println(me.getValue());
            }
        }
    }
}
Producción

1: Brad
2: Anil
4: Sachin
88: XYZ
44: Ajit

Hashtable vs SynchronizedHashMap

                               Tabla de picadillo                                                                                         HashMap sincronizado                                         

Hashtable no permite ni una sola clave nula y valores nulos.

HashMap sincronizado permite una clave nula y cualquier número de valores nulos.

Los iteradores devueltos por Hashtable son de naturaleza a prueba de fallas. es decir, no lanzan ConcurrentModificationException si el mapa se modifica después de la creación del iterador.

Los iteradores devueltos por HashMap sincronizado son de naturaleza rápida. es decir, lanzan ConcurrentModificationException si el mapa se modifica después de la creación del iterador.

HashTable estuvo allí desde JDK 1.1. A partir de JDK 1.2, se ha convertido en parte de Java Collection Framework.

HashMap se introduce en JDK 1.2.

HashTable es la clase heredada. A veces se considera debido a la desaprobación. Por lo tanto, se recomienda no utilizar HashTable en sus aplicaciones.

Si desea un alto nivel de consistencia de datos, solo considere usar HashMap sincronizado.

Publicación traducida automáticamente

Artículo escrito por kashish2008 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 *