Différences entre HashMap et HashTable en Java

Publié: 2021-06-02

Si vous vous renseignez sur Java et ses applications, vous devez avoir rencontré HashMap et HashTable. Les deux font partie des classes les plus importantes du framework Java Collection. Vous les utiliserez intensivement lors du développement avec Java, c'est pourquoi il est essentiel de comprendre leurs différences.

Dans les points suivants, nous aborderons en détail le sujet HashTable vs HashMap et expliquerons les distinctions entre les deux :

Table des matières

Qu'est-ce qu'HashMap ?

HashMap fait partie de la collection de Java depuis l'introduction de Java 1.2. Il vous permet d'effectuer des implémentations de base de l'interface Map de Java. HashMap stocke les données dans des paires (clé, valeur) et pour y accéder, vous devrez utiliser un index d'un autre type, tel qu'un entier.

Ici, vous utilisez un objet comme clé (index) pour un autre objet (valeur), d'où l'utilisation de la paire (clé, valeur). Si vous ajoutez une clé en double, elle remplacera l'élément de la clé correspondante.

Fonctionnalités de HashMap

Pour comprendre les distinctions entre HashTable et HashMap, vous devez d'abord comprendre leurs fonctionnalités. Cela vous familiariserait avec les bases des deux. HashMap possède les fonctionnalités suivantes :

  • Il fait partie du package java.util.
  • Il étend une classe abstraite AbstractMap qui fournit une implémentation incomplète de l'interface Map.
  • Parallèlement à l'implémentation de l'interface Map, il implémente également les interfaces Serializable et Cloneable.
  • Il autorise les valeurs en double mais n'autorise pas les clés en double. Cela signifie qu'une clé ne peut pas avoir plus d'une valeur, mais plusieurs clés peuvent avoir une seule valeur.
  • Vous ne pouvez utiliser la clé null qu'une seule fois dans un HashMap, mais vous pouvez utiliser plusieurs valeurs null.
  • Il ne donne aucune garantie quant à l'ordre de la carte, en particulier si l'ordre resterait constant ou non dans le temps. HashMap est presque similaire à HashTable mais n'est pas synchronisé.
  • HashSet utilise HashMap en interne.

Qu'est-ce que HashTable ?

Vous utilisez la classe HashTable pour implémenter une table de hachage qui mappe les clés aux valeurs. Ici, vous pouvez utiliser des objets non nuls comme clé ou comme valeur. Gardez à l'esprit que pour stocker et récupérer des objets d'une table de hachage avec succès, les objets que vous avez utilisés comme clés doivent implémenter la méthode hashCode et la méthode equals.

Une table de hachage stocke les données dans un format de tableau et chaque valeur de données a une valeur d'index unique. Cela vous permet d'accéder assez rapidement à des données particulières si vous connaissez l'index requis.

Caractéristiques de HashTable

HashTable a ses caractéristiques particulières, tout comme HashMap. Cependant, ces fonctionnalités le rendent unique et différent de HashMap à bien des égards :

  • HashTable est assez similaire à HashMap mais est synchronisé.
  • Il stocke les paires clé-valeur dans une table de hachage.
  • Ici, vous spécifiez un objet utilisé comme clé et la valeur que vous souhaitez lui associer. Ensuite, vous hachez la clé et utilisez le code de hachage généré comme index où vous stockez la valeur dans la table.
  • La capacité par défaut de la classe Hashtable est de 11 et le facteur de charge est de 0,75.
  • HashMap n'offre pas d'énumération, alors que Hashtable n'offre pas d'énumération rapide.

Différences entre HashMap et HashTable

Maintenant que vous connaissez les points forts particuliers de HashMap et HashTable, nous allons maintenant les comparer et voir les principales différences entre les deux :

HashMap Table de hachage
Il n'est pas synchronisé. Vous ne pouvez pas partager de nombreux threads ici sans utiliser le code de synchronisation approprié, car il n'est pas sécurisé pour les threads. Il est synchronisé. Vous pouvez le partager avec de nombreux threads car il est thread-safe.
Il hérite de la classe AbstractMap. Il hérite de la classe Dictionary.
Ici, l'itérateur est rapide. Dans HashTable, l'énumérateur n'est pas rapide.
L'itérateur parcourt le HashMap. L'énumérateur et l'itérateur traversent le HashTable.
Vous pouvez synchroniser un HashMap en appelant le code
Carte m = Collections.synchronisedMap(hashMap);
Les tables de hachage sont synchronisées en interne et vous ne pouvez pas les désynchroniser avec n'importe quel code.
C'est assez rapide. Il est relativement plus lent que HashMap.
HashMap est une nouvelle classe et a été récemment introduite dans JDK 1.2. HashTable est une classe héritée.
Il autorise plusieurs valeurs nulles et une clé nulle. Il n'autorise aucune valeur ou clé nulle.

Exemple de codage

Voici un exemple de HashMap et HashTable au travail afin que vous puissiez comprendre les distinctions entre HashMap et HashTable.

Contribution:

importer java.util.* ;

importer java.lang.* ;

importer java.io.* ;

classe publique JavaTester{

public static void main(String args[]){

Table de hachage ht=nouvelle table de hachage();

ht.put(1,"Uday");

ht.put(1,"Ujjwal");

ht.put(2,"Sommet");

ht.put(3,"Vijay");

System.out.println(“————-Table de hachage————–“);

Set<Integer> keySet = ht.keySet();

pour (Clé entière:keySet) {

System.out.println(clé + ” “+ht.get(clé));

}

HashMap hm=nouveau HashMap();

hm.put(0,"Uday");

hm.put(4,"Uday"); // vous pouvez avoir des valeurs en double dans un hashmap

hm.put(1,"Sommet");

hm.put(2,"Vijay");

System.out.println(“———–Hash map———–“);

Set<Integer> keySet1 = ht.keySet();

pour (Clé entière:keySet) {

System.out.println(clé + ” “+hm.get(clé));

}

}

}

Sortir:

Table de hachage :

3 Vijay

2 Sommet

1 Ujjwal

Carte de hachage :

0 jour

1 Sommet

2 Vijay

4 jour

Quand utiliser HashMap vs HashTable ?

Le principal facteur qui détermine si vous utiliserez HashMap ou HashTable est la synchronisation. Si vous avez besoin d'une tâche thread-safe, vous devez utiliser HashTable car toutes ses méthodes sont synchronisées. Cependant, il s'agit d'une classe héritée et vous devez les éviter.

Si vous avez un environnement multithread, vous devez utiliser ConcurrentHashMap car il est assez similaire à HashTable. Il vous permet de synchroniser correctement le HashMap.

Les opérations synchronisées entraînent de mauvaises performances, vous devez donc les éviter dans la plupart des cas. De plus, HashMap convient à un environnement non fileté, vous pouvez donc l'utiliser facilement.

Apprenez des cours de logiciels en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Conclusion

HashMap et HashTable sont des codes Java populaires avec des fonctions similaires. Cependant, comme vous pouvez le constater, il existe plusieurs différences importantes entre les deux. HashMap est une classe Java, tandis que HashTable est une structure de données.

Si vous souhaitez en savoir plus sur Java et d'autres langages de programmation, nous vous recommandons de consulter notre programme Executive PG en développement de logiciels avec spécialisation en développement Full Stack .

Qu'est-ce qu'une table de hachage ?

La table de hachage est une structure de données de conteneur largement utilisée dans la programmation informatique. Les tables de hachage sont utilisées pour contenir des paires clé-valeur, où la clé peut être n'importe quel objet. En tant que conteneur, une table de hachage doit prendre en charge les opérations d'insertion et de suppression. En tant qu'outil de recherche, une table de hachage doit prendre en charge l'opération get. Si une table de hachage est censée être une structure de données de dictionnaire, elle doit également prendre en charge l'opération de contient. Ainsi, en général, une table de hachage est une structure de données largement utilisée pour implémenter efficacement les opérations d'insertion, de suppression, d'obtention et de contient. La table de hachage est largement utilisée en raison de ses performances rapides.

Qu'est-ce que le framework de collections en Java ?

Java Collections Framework est un ensemble d'interfaces, de classes et d'algorithmes pour la plate-forme Java. Il fait partie de la plate-forme Java depuis la version 1.2. Il comprend des interfaces pour les conteneurs, les listes, les files d'attente, etc., mais il comprend également des classes pour gérer les dates et les heures, une classe pour gérer les expressions régulières, une autre pour gérer l'internationalisation et encore une autre pour gérer la recherche dans les fichiers.

Quelle est la relation entre une table de hachage et une hashmap en Java ?

Une table de hachage est une structure de données spéciale qui associe des clés à des valeurs. Les clés peuvent être n'importe quel objet, mais toutes les clés d'une table de hachage donnée doivent être comparables les unes aux autres (c'est-à-dire utiliser les mêmes interfaces ou des interfaces compatibles). En Java, une carte est un type spécifique de table de hachage qui est implémenté à l'aide d'un TreeMap. Les clés d'une carte doivent implémenter une méthode d'égalité, et la carte utilise cette méthode pour déterminer si deux clés sont égales ou non. Cela signifie que seules les clés sont stockées dans la carte et que leur valeur associée est calculée chaque fois que nécessaire.