ConcurrentHashMap vs Hashtable en Java

Mohammad Irfan 12 octubre 2023
  1. Creando ConcurrentHashMap en Java
  2. Creando HashTable en Java
ConcurrentHashMap vs Hashtable en Java

Este tutorial presenta la diferencia entre ConcurrentHashMap y Hashtable en Java.

ConcurrentHashMap es una clase que pertenece al marco java.util.concurrent. Implementa ConcurrentMap y una interfaz serializable. Se utiliza para almacenar datos seguros para subprocesos. Utiliza varios depósitos para almacenar datos. La sintaxis de declaración de esto es:

public class ConcurrentHashMap<K, V>
    extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable

Puntos clave de ConcurrentHashMap

  • Es seguro para subprocesos.
  • Utiliza múltiples bloqueos a nivel de segmento en lugar de todo el mapa.
  • Utiliza 16 cerraduras por defecto.
  • Se aplica a bloquear solo para actualizaciones. Para la lectura, permite que varios subprocesos accedan a los datos.

Veamos un ejemplo de ConcurrentHashMap.

Creando ConcurrentHashMap en Java

En este ejemplo, creamos un ConcurrentHashMap que contiene datos de tipo String e Integer. Usamos el método put() para agregar elementos y los métodos getKey() y getValue() para acceder a la clave y el valor respectivamente. Vea el ejemplo a continuación.

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SimpleTesting {
  ConcurrentHashMap<String, Integer> hm = new ConcurrentHashMap<String, Integer>();
  public void AddScore(String name, int score) {
    hm.put(name, score);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.AddScore("Rohan", 95);
    simpleTesting.AddScore("Sohan", 85);
    simpleTesting.AddScore("Mohan", 93);
    simpleTesting.AddScore("Lohan", 91);
    System.out.println("Students Scores: ");
    for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
      System.out.println(entry.getKey() + " - " + entry.getValue());
    }
  }
}

Producción :

Students Scores: 
Lohan - 91
Mohan - 93
Sohan - 85
Rohan - 95

HashTable es una clase que pertenece al marco de la colección de Java. Se utiliza para almacenar datos en pares de clave y valor. Implementa la interfaz Map, Cloneable y Serializable. La declaración de clase se da a continuación.

public class Hashtable<K, V> extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable

Puntos clave de HashTable:

  • Utiliza un solo bloqueo para todos los datos.
  • Es seguro para subprocesos, es decir, sincronizado.
  • No permite claves ni valores nulos.

Veamos un ejemplo de HashTable.

Creando HashTable en Java

En este ejemplo, creamos una HashTable que almacena datos de tipo cadena y entero. Usamos el método put() para agregar elementos y el método getKey(), y el método getValue() para acceder a la clave y el valor respectivamente. Vea el ejemplo a continuación.

import java.util.Hashtable;
import java.util.Map;

public class SimpleTesting {
  Hashtable<String, Integer> hm = new Hashtable<String, Integer>();
  public void AddScore(String name, int score) {
    hm.put(name, score);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.AddScore("Rohan", 95);
    simpleTesting.AddScore("Sohan", 85);
    simpleTesting.AddScore("Mohan", 93);
    simpleTesting.AddScore("Lohan", 91);
    System.out.println("Students Scores: ");
    for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
      System.out.println(entry.getKey() + " - " + entry.getValue());
    }
  }
}

Producción :

Students Scores: 
Rohan - 95
Mohan - 93
Sohan - 85
Lohan - 91