L'infrastructure Java Collections fournit un ensemble de classes de collection. Chaque classe a ses propres forces et faiblesses en matière de performance. Certaines des classes fournissent des implémentations complètes qui peuvent être utilisées telles quelles. D'autres sont abstraites et fournissent des implémentations squelettiques utilisées comme points de départ pour la création de collections. Les implémentations de la collection utilisent le framework synchronized-wrapper pour fournir des classes synchronisées, sinon les implémentations ne sont pas synchronisées. Plusieurs classes fournissent des implémentations de l'interface de carte.
La plate-forme Java contient trois implémentations de carte à usage général: HashMap, TreeMap et LinkedHashMap. HashMap et Hashtable sont deux collections en Java utilisées pour stocker des paires clé / valeur dans une table de hachage. Hashtable est une carte synchronisée et HashMap est une carte non synchronisée. Néanmoins, si vous devez utiliser une carte synchronisée, une table de hachage est plus rapide que d'utiliser une table de hachage dans un wrapper synchronisé. Les deux sont des collections basées sur le hachage en Java, mais ils ont leur juste part de différences. Nous soulignons quelques différences clés entre les deux pour vous aider à mieux comprendre les termes..
HashMap est une implémentation de carte basée sur une table de hachage qui fournit des performances à temps constant pour l'insertion et la localisation de paires. La classe HashMap fournit une implémentation de carte basée sur une structure de données Hashtable. Cette implémentation prend en charge toutes les opérations de mappage et autorise plusieurs valeurs NULL mais une seule clé NULL. Il utilise des paires clé / valeur pour stocker les valeurs dans une table de hachage. C'est une carte non synchronisée, ce qui signifie qu'elle n'est pas sécurisée pour les threads et ne peut pas être partagée entre plusieurs threads sans une synchronisation appropriée..
Contrairement à HashMap, Hashtable est une mappe synchronisée et sécurisée pour les threads, ce qui signifie qu’elle peut être partagée entre plusieurs threads. Dans Hashtable, vous spécifiez un objet pouvant être utilisé en tant que clé et la valeur associée à la clé. Une table de hachage mappe les clés aux valeurs à l'aide d'une fonction de hachage. Java fournit cette fonction sous la forme de la méthode hashcode () de Object, que les classes remplacent pour fournir les codes de hachage appropriés. Contrairement à HashMap, Hashtable ne prend pas en charge les valeurs NULL et les clés NULL car il existe un contrôle NULL dans l'implémentation de la méthode put de Hashtable..
Les deux sont des collections Java basées sur le hachage, utilisées pour stocker des données dans des paires clé / valeur. HashMap est une implémentation de carte basée sur une table de hachage qui fournit des performances à temps constant pour l'insertion et la localisation de paires. Les performances peuvent être ajustées à l'aide de constructeurs qui vous permettent de définir la capacité et le facteur de charge de la table de hachage. Hashtable de base est assez similaire à HashMap, même en ce qui concerne les noms de méthodes. Il stocke la paire clé / valeur dans la table de hachage. Dans Hashtable, vous spécifiez un objet pouvant être utilisé comme clé et la valeur associée à la clé.
HashMap et Hashtable utilisent des techniques de hachage pour stocker des valeurs basées sur la clé. Comme HashMap, Hashtable utilise des paires clé / valeur pour stocker les valeurs dans une table de hachage. Cependant, la principale différence entre les deux est la synchronisation. HashMap est une carte non synchronisée alors que Hashtable est une carte synchronisée. Cela signifie que HashMap n'est pas thread-safe et ne peut pas être partagé entre plusieurs threads sans code de synchronisation approprié. Au contraire, Hashtable est thread-safe et peut être partagé entre plusieurs threads. Hashtable est plus rapide que d'utiliser un HashMap dans un wrapper synchronisé, si vous devez utiliser une carte synchronisée..
La classe HashMap fournit une implémentation de carte basée sur une structure de données Hashtable. Cette implémentation prend en charge toutes les opérations de mappage et autorise plusieurs valeurs NULL mais une seule clé NULL afin de pouvoir conserver des propriétés de clé uniques. Cependant, il ne fait aucune garantie sur l'ordre dans lequel les entrées sont stockées. La table de hachage, d’autre part, associe les clés aux valeurs à l’aide d’une fonction de hachage. Contrairement à HashMap, Hashtable ne prend pas en charge les valeurs NULL et les clés NULL car il existe un contrôle NULL dans l'implémentation de la méthode put de Hashtable..
Etant donné que HashMap n'est pas une carte synchronisée, elle est beaucoup plus rapide et performante qu'une Hashtable. En réalité, elle utilise moins de mémoire que Hashtable. Bien qu'ils soient pratiquement identiques, Hashtable est un peu plus lent qu'un HashMap mais plus rapide qu'un HashMap synchronisé. De manière inhérente, l'utilisation de Hashtable avec un accès multithread n'est pas sûre, car seules les méthodes sont synchronisées. Hashtable est l'homologue synchronisé de HashMap. Les objets non synchronisés fonctionnent mieux que les objets synchronisés, tout comme une table de hachage fonctionne mieux dans un environnement à thread unique..
La classe HashMap vous donne une carte non triée, non ordonnée. Ainsi, lorsque vous avez besoin d'une carte et que vous ne vous préoccupez pas de l'ordre dans lequel les entrées sont stockées, HashMap est la solution..
Hashtable, tout comme Vector, fait partie de l’époque préhistorique de Java. Tout comme Vector est une contrepartie synchronisée à ArrayList, une version plus moderne et plus avancée, Hashtable est la contrepartie synchronisée à HashMap. Cependant, une classe ne peut pas être synchronisée. Par conséquent, lorsque nous disons que Hashtable est une mappe synchronisée, cela signifie que les méthodes de clé de la classe sont synchronisées..
Bien que les deux soient virtuellement identiques, la différence réside dans la manière dont ils sont synchronisés et leurs performances. HashMap fonctionne mieux dans un environnement multi-thread alors que Hashtable fonctionne mieux dans un environnement mono-thread.