Lorsque vous apprenez un nouveau langage informatique, l'une des premières choses que vous avez tendance à demander est de savoir comment travailler avec de grands groupes de données. Ce sujet est souvent traité dans la rubrique «Structures de données». Si vous creusez plus profondément, vous devez aborder des sujets tels que les listes chaînées, les files d'attente, les piles et les arbres binaires parmi de nombreuses autres structures de données. En Java, ces structures font partie de Java Collections Framework. 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 Java Collections Framework standardise la manière dont ces groupes d'objets sont gérés. En fait, le cadre des collections a été conçu pour atteindre plusieurs objectifs..
L'ensemble de la structure de collections est conçue 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 implémenter votre propre collection si vous le souhaitez. Cependant, outre les collections, le cadre définit plusieurs interfaces et classes de cartes. Java contient trois implémentations de carte à 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’association entre objets. Cet article résume les principales différences entre HashMap et HashSet..
HashMap est l'implémentation la plus couramment utilisée de l'interface Map, qui fournit une carte clé / valeur de base dans laquelle les éléments ne sont pas ordonnés. Il 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 un int «relativement unique» pour cet objet. Cela fonctionne simplement sur le principe de hachage, ce qui signifie qu’il utilise une fonction de hachage pour mapper les valeurs d’identification. Tout comme Vector et Stack ont leurs remplaçants dans ArrayList et LinkedList, Hashtable a un remplaçant dans HashMap. Il étend AbstractMap pour implémenter l’interface Map à l’aide d’une représentation Hashtable interne. Et similaire aux autres implémentations générales, HashMap supporte les méthodes optionnelles de Map, autorise les valeurs NULL et n'est pas synchronisé..
HashSet est l'un des membres de Java Collections Framework qui implémente l'interface Set, renforcée 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 carte, l'ensemble est exactement une collection avec exactement la même interface. Il n'y a donc aucune fonctionnalité supplémentaire, comme c'est le cas avec deux listes différentes. HashSet utilise une fonction de hachage spécialement conçue pour les recherches rapides. C'est une collection non ordonnée d'objets uniques qui ne peuvent pas stocker de valeurs en double. HashSet étend la classe AbstractSet qui implémente l'interface Set. Cependant, HashSet ne définit aucune autre méthode que celles fournies par ses superclasses et ses interfaces..
HashMap est l'implémentation la plus couramment utilisée de l'interface Map, qui fournit une carte clé / valeur de base dans laquelle les éléments ne sont pas ordonnés. Cela fonctionne simplement sur le principe de hachage, ce qui signifie qu’il utilise une fonction de hachage pour mapper les valeurs d’identification. HashSet, en revanche, est l’un des membres de Java Collections Framework qui implémente l’interface Set, protégée par une table de hachage qui est en fait une instance de HashMap. En termes simples, HashMap implémente l'interface Map, alors que HashSet implémente l'interface Set.
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 super-classes AbstractCollection et AbstractSet, que HashSet partage avec TreeSet. HashMap étend AbstractMap pour implémenter 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 thread-safe.
Comme Map ne prend pas en charge les clés en double, HashMap n'autorise pas les clés en double, mais il est autorisé à utiliser des valeurs en double. Cela signifie que des valeurs en double peuvent exister dans HashMap, mais vous pouvez utiliser la collection comme valeur contre certaines clés. Chaque clé doit être unique dans une table de hachage et une clé unique ne peut pas avoir plus d'une valeur. HashSet, en revanche, ne peut pas avoir des éléments en double par la simple définition d'un ensemble, ce qui signifie que vous ne pouvez pas stocker de valeurs en double dans HashSet. HashMap n'autorise qu'une seule clé NULL mais autorise un nombre quelconque de valeurs NULL, alors que HashSet n'autorise qu'une seule valeur NULL.
HashMap fonctionne sur le principe de hachage, ce qui signifie qu’il utilise une fonction de hachage pour mapper les valeurs d’identification en interne, en utilisant l’algorithme de hachage pour permettre une extraction facile. Un véritable mécanisme de hachage renvoie toujours le même hashCode () lorsqu'il est appliqué au même objet. HashSet, en revanche, utilise HashMap en interne en tant que structure de données de sauvegarde pour ajouter ou stocker des objets. Cela signifie que lorsqu'un objet de HashSet est créé, il créera un objet de HashMap..
Bien que HashMap et HashSet ne soient pas synchronisés, ce qui signifie qu’ils ne conviennent pas aux opérations thread-safe et qu’ils sont des constructions totalement différentes, ils fournissent des performances constantes dans le temps pour les opérations de base telles que l’ajout, la suppression d’éléments, etc. l'interface Map qui stocke les paires clé / valeur, HashSet est une implémentation de l'interface Set. Un HashSet utilise un HashMap pour sauvegarder sa mise en œuvre. Une carte de hachage, cependant, utilise le principe de hachage et l’utilise pour rechercher rapidement la clé..