Différence entre HashMap et HashSet

Lorsque l’on apprend un nouveau langage informatique, l’une des premières questions que l’on se pose est de savoir comment travailler avec de grands groupes de données. Ce sujet est souvent couvert par le thème « Structures de données ». Si vous creusez un peu plus, vous rencontrerez des sujets tels que les listes chaînées, les files d’attente, les piles et les arbres binaires, parmi bien d’autres structures de données. En Java, ces structures font partie du cadre des collections Java. Une collection n’est rien d’autre qu’un type de structure de données qui fait référence à un regroupement de plusieurs éléments de données et le Java Collections Framework standardise la manière dont ces groupes d’objets sont traités. En fait, le cadre des collections a été conçu pour répondre à plusieurs objectifs.

L’ensemble du cadre des collections est conçu autour d’un ensemble d’interfaces standard. Plusieurs implémentations standard telles que LinkedList, HashSet et TreeSet sont fournies par ces interfaces que vous pouvez utiliser telles quelles. En outre, vous pouvez également mettre en œuvre votre propre collection si vous le souhaitez. Toutefois, outre les collections, le cadre définit plusieurs interfaces et classes de cartes. Java contient trois implémentations de cartes à usage général – HashMap, TreeMap et LinkedHashMap – qui stockent des paires clé/valeur. Bien que les cartes ne soient pas techniquement des collections, elles sont entièrement intégrées aux collections. En fait, les cartes se concentrent sur les groupes d’associations entre objets. Cet article résume les principales différences entre HashMap et HashSet.

Qu’est-ce qu’un HashMap ?

HashMap est l’implémentation la plus couramment utilisée de l’interface Map qui fournit une carte clé/valeur de base où les éléments ne sont pas ordonnés. Elle utilise une valeur spéciale appelée code de hachage, au lieu d’une recherche lente de la clé. Le code de hachage est un moyen de prendre des informations dans l’objet en question et de les transformer en une valeur « relativement unique » pour cet objet. Il fonctionne simplement sur le principe du hachage, ce qui signifie qu’il utilise une fonction de hachage pour mettre en correspondance des valeurs d’identification. Tout comme Vector et Stack ont leurs remplaçants dans ArrayList et LinkedList, Hashtable a un remplaçant dans HashMap. Elle étend AbstractMap pour mettre en œuvre l’interface Map à l’aide d’une représentation interne Hashtable. Comme d’autres implémentations générales, HashMap prend en charge les méthodes optionnelles de Map, autorise les valeurs nulles et n’est pas synchronisé.

Qu’est-ce qu’un HashSet ?

HashSet est l’un des membres du Java Collections Framework qui implémente l’interface Set, soutenue par une table de hachage qui est en fait une instance de HashMap. Comme son nom l’indique, il est implémenté par une table de hachage, un tableau dans lequel les éléments sont stockés à une position dérivée de leur contenu. Contrairement à une Map, Set est exactement une Collection avec exactement la même interface, il n’y a donc pas de fonctionnalité supplémentaire comme c’est le cas avec deux Lists différentes. HashSet utilise une fonction de hachage conçue spécifiquement pour les recherches rapides. Il s’agit d’une collection non ordonnée d’objets uniques qui ne peut pas stocker de valeurs en double. HashSet étend la classe AbstractSet qui implémente l’interface Set. Cependant, HashSet ne définit pas de méthodes supplémentaires autres que celles fournies par ses superclasses et interfaces.

Différence entre HashMap et HashSet

Base de données

HashMap est l’implémentation la plus couramment utilisée de l’interface Map qui fournit une carte clé/valeur de base où les éléments ne sont pas ordonnés. Elle fonctionne simplement sur le principe du hachage, ce qui signifie qu’elle utilise une fonction de hachage pour mettre en correspondance des valeurs d’identification. HashSet, quant à lui, est l’un des membres du Java Collections Framework qui implémente l’interface Set, soutenue par une table de hachage qui est en fait une instance de HashMap. En d’autres termes, HashMap implémente l’interface Map, tandis que HashSet implémente l’interface Set.

Fonctionnalité

HashSet crée une collection qui utilise une table de hachage pour le stockage. La table de hachage stocke les informations à l’aide d’une méthode appelée « hachage ». HashSet utilise une fonction de hachage, spécialement conçue pour les recherches rapides, pour stocker des éléments ou des valeurs. La plupart des fonctionnalités de HashSet sont fournies par les superclasses AbstractCollection et AbstractSet, que HashSet partage avec TreeSet. HashMap étend AbstractMap pour mettre en œuvre l’interface Map à l’aide d’une représentation interne Hashtable. Les deux classes ne sont pas synchronisées, ce qui signifie qu’elles ne conviennent pas aux opérations sûres pour les threads.

Valeurs en double

Comme Map ne prend pas en charge les clés dupliquées, HashMap n’autorise pas les clés dupliquées, mais il est possible d’avoir des valeurs dupliquées. Cela signifie que des valeurs en double peuvent exister dans HashMap, mais que vous pouvez utiliser une collection comme valeur par rapport à une clé donnée. Chaque clé doit être unique dans une HashMap et une même clé ne peut pas avoir plus d’une valeur. Le HashSet, quant à lui, ne peut pas avoir d’éléments dupliqués par la simple définition d’un Set, ce qui signifie que vous ne pouvez pas stocker de valeurs dupliquées dans le HashSet. HashMap ne permet qu’une seule clé nulle mais autorise un nombre illimité de valeurs nulles, tandis que HashSet n’autorise qu’une seule valeur nulle.

Mécanisme de stockage

HashMap fonctionne selon le principe du hachage, ce qui signifie qu’il utilise une fonction de hachage pour mapper les valeurs d’identification en interne à l’aide de l’algorithme de hachage afin de permettre une récupération aisée. Un véritable mécanisme de hachage renvoie toujours le même hashCode( ) lorsqu’il est appliqué au même objet. HashSet, quant à lui, utilise en interne HashMap comme structure de données d’appui pour ajouter ou stocker des objets. Cela signifie que lorsqu’un objet de HashSet est créé, il crée un objet de HashMap.

Résumé de HashMap vs. HashSet

Bien que le HashMap et le HashSet ne soient pas synchronisés, ce qui signifie qu’ils ne conviennent pas aux opérations thread-safe, et qu’il s’agisse de constructions entièrement différentes, ils offrent des performances en temps constant pour les opérations de base telles que l’ajout, la suppression d’un élément, etc. Alors que HashMap est une implémentation générale de l’interface Map qui stocke des paires clé/valeur, HashSet est une implémentation de l’interface Set. Un HashSet utilise une HashMap pour étayer son implémentation. Une HashMap, cependant, utilise le principe de hachage et s’en sert pour rechercher rapidement la clé.