HashMap et LinkedHashMap sont deux des implémentations de carte les plus courantes et les plus générales de la plate-forme Java. Ce sont essentiellement des classes basées sur le hachage, assez similaires les unes aux autres et utilisées pour créer une carte. L’interface Map est la dernière des principales interfaces de Collection Framework qui définit les opérations prises en charge par un ensemble d’associations clé à valeur dans lesquelles les clés sont uniques. Ces implémentations de carte sont basées sur un algorithme de hachage. Tandis que la classe HashMap implémente des cartes non ordonnées, la classe LinkedHashMap implémente des cartes ordonnées. L'implémentation LinkedHashMap est une sous-classe de la classe HashMap, ce qui signifie qu'elle hérite des fonctionnalités de la classe HashMap. Il n'y a pas beaucoup de différence entre les deux en termes de performance. Nous allons jeter un coup d'oeil.
HashMap est l'une des quatre implémentations les plus courantes et les plus générales de l'interface Map en Java basée sur un algorithme de hachage. Il est analogue à la classe set HashSet, bien que les éléments ne soient pas ordonnés dans les deux classes. Il est implémenté sous forme de table de hachage mais, contrairement à LinkedHashMap, il ne conserve aucun ordre sur les clés ou les valeurs. En général, HashMap fournit des performances à temps constant pour les opérations de vente et d'achat. La classe n'est pas thread-safe mais elle autorise une clé NULL et plusieurs valeurs NULL. Comme il ne maintient pas un ordre d'itération, il nécessite moins de mémoire.
LinkedHashMap fait partie des quatre implémentations à usage général de l'interface Map, qui est une sous-classe de la classe HashMap, ce qui signifie qu'elle hérite de ses fonctionnalités. Bien que cela ressemble beaucoup à HashMap en termes de performances, il conserve cependant l'ordre d'insertion des clés, dans l'ordre dans lequel les clés sont insérées dans la carte ou dans l'ordre dans lequel les entrées sont accessibles dans la carte. Il affine le contrat de sa classe mère en garantissant l'ordre dans lequel les itérateurs renvoient ses éléments. Cependant, il nécessite plus de mémoire qu'un HashMap, car il maintient une liste doublement chaînée en Java..
HashMap est une implémentation de l'interface Map en Java basée sur le hachage. Les cartes sont une collection de paires clé-valeur et sont utilisées lorsque les listes sont dans une collection ordonnée. HashMap est une classe Collection qui stocke la valeur dans des paires clé-valeur. En termes simples, il mappe les clés aux valeurs, ce qui signifie qu’il peut localiser une valeur en fonction d’une clé. LinkedHashMap est une implémentation de la liste chaînée de l'interface Map, à l'instar de HashMap, sauf qu'elle conserve les commandes des éléments qui y sont insérés. C'est une sous-classe de HashMap qui hérite de ses fonctionnalités. LinkedHashMap affine le contrat de sa classe parente, HashMap, en garantissant l'ordre dans lequel les itérateurs renvoient ses éléments.
La principale différence entre HashMap et LinkedHashMap est l’ordre. Les éléments d'un HashMap ne sont pas en ordre, totalement aléatoires, alors que les éléments de LinkedHashMap sont ordonnés. Les entrées d'un LinkedHashMap sont dans l'ordre d'insertion de clé, qui correspond à l'ordre dans lequel les clés sont insérées dans la carte. Cela signifie que la première clé insérée dans la mappe est énumérée en premier, de même que la valeur qui lui est associée et la dernière entrée insérée dans énuméré en dernier. LinkedHashMap a un ordre d'itération prévisible, ce qui signifie qu'il peut également conserver ses éléments dans l'ordre d'accès, qui correspond à l'ordre d'accès aux entrées..
Les classes HashMap et LinkedHashMap utilisent toutes deux le hachage pour implémenter l'interface Map en Java, sauf que HashMap est implémenté sous forme de table de hachage, tandis que LinkedHashMap conserve une liste doublement chaînée de Buckets parcourant toutes ses entrées. C'est pourquoi LinkedHashMap nécessite plus de mémoire que HashMap car contrairement à HashMap, il maintient un ordre. Il supprime les commandes chaotiques de HashMap, sans les coûts supplémentaires qui auraient été encourus autrement avec TreeMap. En outre, la classe LinkedHashMap est très similaire à la classe HashMap sous de nombreux aspects, tels que la synchronisation et les clés / valeurs nulles, car elles autorisent toutes les deux une clé nulle et plusieurs valeurs nulles..
Bien que les deux classes offrent des performances comparables, la classe HashMap est considérée comme le choix préféré si la commande n'est pas un problème, car elle ne garantit pas l'ordre itératif de la carte. Les opérations telles que l'ajout, la suppression ou la recherche d'entrées basées sur une clé sont constantes dans le temps, car elles hachent la clé. Ainsi, l'ajout, la suppression et la recherche d'entrées dans un LinkedHashMap peuvent être légèrement plus lents que dans un HashMap, car celui-ci maintient une liste de Buckets à double liaison en Java. De plus, HashMap nécessite moins de mémoire que LinkedHashMap car aucun ordre n'est maintenu..
Bien que les performances des classes HashMap et HashMap soient presque similaires, HashMap nécessite moins de mémoire qu'un LinkedHashMap, car il ne garantit pas l'ordre d'itération de la carte, ce qui permet d'ajouter, de supprimer et de rechercher des entrées dans HashMap relativement plus rapidement. un LinkedHashMap. Cependant, la différence clé entre les deux est l’ordre: les éléments d’un HashMap ne sont pas dans l’ordre, alors que les éléments d’un LinkedHashMap sont dans l’ordre d’insertion des clés par défaut, ce qui signifie l’ordre dans lequel les clés sont insérées dans la carte. LinkedHashMap peut également conserver ses éléments dans l'ordre d'accès, c'est-à-dire l'ordre dans lequel les entrées sont accessibles. Comme avec LinkedHashMap, une liste à double lien doit être maintenue, elle a moins de performances que HashMap.