ConcurrentHashMap vs Hashtable en Java

Mohammad Irfan 12 octobre 2023
  1. Création de ConcurrentHashMap en Java
  2. Création d’une table de hachage en Java
ConcurrentHashMap vs Hashtable en Java

Ce didacticiel présente la différence entre ConcurrentHashMap et Hashtable en Java.

ConcurrentHashMap est une classe qui appartient au framework java.util.concurrent. Il implémente ConcurrentMap et une interface sérialisable. Il est utilisé pour stocker des données thread-safe. Il utilise plusieurs compartiments pour stocker les données. La syntaxe de déclaration de ceci est :

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

Points-clés ConcurrentHashMap

  • Il est thread-safe.
  • Il utilise plusieurs verrous au niveau du segment au lieu de la carte entière.
  • Il utilise 16 verrous par défaut.
  • Il s’applique au verrouillage uniquement pour les mises à jour. Pour la lecture, il permet à plusieurs threads d’accéder aux données.

Voyons un exemple de ConcurrentHashMap.

Création de ConcurrentHashMap en Java

Dans cet exemple, nous avons créé un ConcurrentHashMap qui contient des données de type String et Integer. Nous avons utilisé la méthode put() pour ajouter des éléments et les méthodes getKey() et getValue() pour accéder respectivement à la clé et à la valeur. Voir l’exemple ci-dessous.

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

Production :

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

HashTable est une classe qui appartient au framework de collection Java. Il est utilisé pour stocker des données dans des paires de clés et de valeurs. Il implémente les interfaces Map, Cloneable et Serializable. La déclaration de classe est donnée ci-dessous.

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

Points clés de la table de hachage :

  • Il utilise un seul verrou pour l’ensemble des données.
  • Il est thread-safe, c’est-à-dire synchronisé.
  • Il n’autorise pas les clés ou valeurs nulles.

Voyons un exemple de HashTable.

Création d’une table de hachage en Java

Dans cet exemple, nous avons créé un HashTable qui stocke des données de type chaîne et entier. Nous avons utilisé la méthode put() pour ajouter des éléments et les méthodes getKey() et getValue() pour accéder respectivement à la clé et à la valeur. Voir l’exemple ci-dessous.

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

Production :

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