Différence entre hashmap et hashtable

Différence entre hashmap et hashtable

Le cadre Java Collections fournit un ensemble de classes de collecte. Chaque classe a ses propres forces et faiblesses de performance. Certaines classes fournissent des implémentations complètes qui peuvent être utilisées en tant que. D'autres sont abstraits qui fournissent des implémentations squelettiques qui sont utilisées comme points de départ pour créer des collections. Les implémentations de la collection utilisent le framework synchronisé pour fournir des classes synchronisées, sinon les implémentations ne sont pas synchronisées. Plusieurs classes fournissent des implémentations de l'interface MAP.

La plate-forme Java contient trois implémentations de carte générale à usage général: Hashmap, Treemap et LinkedHashmap. Hashmap et Hashtable sont deux collections en Java utilisées pour stocker des paires de clés / valeur dans une table de hachage. HashTable est une carte synchronisée et Hashmap est une carte non synchronisée. Néanmoins, si vous avez besoin d'utiliser une carte synchronisée, un hashtable est plus rapide que d'utiliser un hashmap 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.

Qu'est-ce que Hashmap?

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 des paires. La classe Hashmap fournit une implémentation de carte basée sur une structure de données de hashtable. Cette implémentation prend en charge toutes les opérations de la carte et permet plusieurs valeurs nulles mais une seule clé nul. Il utilise des paires de clés / valeur pour stocker les valeurs dans une table de hachage. Il s'agit d'une carte non synchronisée qui signifie qu'elle n'est pas en file et ne peut pas être partagée entre plusieurs threads sans synchronisation appropriée.

Qu'est-ce que le hashtable?

Contrairement à Hashmap, Hashable est une carte synchronisée et il est en file d'infrédité, ce qui signifie qu'il peut être partagé entre plusieurs threads. Dans HashTable, vous spécifiez un objet qui peut être utilisé comme clé et la valeur qui va avec la clé. Une cartes de hachage cartes les clés des valeurs à l'aide d'une fonction de hachage. Java fournit cette fonction sous la forme de la méthode HashCode () de l'objet, que les classes remplacent pour fournir des codes de hachage appropriés. Contrairement à HashMap, Hashtable ne prend pas en charge les valeurs nulles et les clés nuls car il y a un contrôle nul dans la méthode de put implémentation de hashtable.

Différence entre hashmap et hashtable

  1. Bases de hashmap vs. Hachage

Les deux sont des collections basées sur le hachage en Java utilisées pour stocker des données dans des paires de clés / 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 des paires. Les performances peuvent être ajustées avec l'utilisation de constructeurs qui vous permettent de définir la capacité et le facteur de charge du tableau de hachage. Le hashtable de base est assez similaire au hashmap, même en baisse les noms de méthode. Il stocke la paire de clés / valeur dans la table de hachage. Dans HashTable, vous spécifiez un objet qui peut être utilisé comme clé et la valeur qui va avec la clé.

  1. Synchronisation de hashmap vs. Hachage

HashMap et Hashtable utilisent des techniques de hachage pour stocker les valeurs en fonction de la clé. Comme Hashmap, HashTable utilise des paires de clés / valeur pour stocker les valeurs dans un tableau de hachage. Cependant, la principale différence entre les deux est la synchronisation. Hashmap est une carte non synchronisée tandis que HashTable est une carte synchronisée. Cela signifie que le hashmap n'est pas un filetage et ne peut pas être partagé entre plusieurs threads sans code de synchronisation approprié. Au contraire, le hashtable est en file et peut être partagé entre plusieurs threads. Hashtable est plus rapide que l'utilisation d'un hashmap dans un wrapper synchronisé, si vous avez besoin d'utiliser une carte synchronisée.

  1. Clés nulles et valeurs nulles pour hashmap vs. Hachage

La classe Hashmap fournit une implémentation de carte basée sur une structure de données de hashtable. Cette implémentation prend en charge toutes les opérations de carte et permet plusieurs valeurs nulles mais une seule clé nul afin qu'elle puisse maintenir des propriétés clés uniques. Cependant, cela ne garantit pas la commande dans laquelle les entrées sont stockées. Le hashtable, en revanche, mappe les clés des valeurs à l'aide d'une fonction de hachage. Contrairement à HashMap, Hashtable ne prend pas en charge les valeurs nulles et les clés nuls car il y a un contrôle nul dans la méthode de put implémentation de hashtable.

  1. Performance de hashmap vs. Hachage

Parce que le hashmap n'est pas une carte synchronisée, elle est beaucoup plus rapide et meilleure qu'un hashtable en termes de performances, et en fait, utilise moins de mémoire que le hashtable. Bien qu'ils soient pratiquement identiques, le hashtable est un peu plus lent qu'un hashmap mais plus rapide qu'un hashmap synchronisé. Inthématiquement, il n'est pas sûr d'utiliser du hashtable avec un accès multithread car seules les méthodes sont synchronisées. HashTable est l'homologue synchronisé de Hashmap. Les objets non synchronisés fonctionnent mieux par rapport aux objets synchronisés, tout comme un hashtable fonctionne mieux dans un seul environnement fileté.

Hashmap vs. Hachage: graphique de comparaison

 

Résumé de Hashmap vs. Hachage

La classe Hashmap vous donne une carte non triée et non ordonnée. Donc, lorsque vous avez besoin d'une carte et que vous ne vous souciez pas de l'ordre dans lequel les entrées sont stockées, alors Hashmap est la voie à suivre.

Hashtable, tout comme Vector, est venu de la préhistorique Java Times. Tout comme Vector est un homologue synchronisé de la liste Array plus moderne et avancée, HashTable est le homologue synchronisé de Hashmap. Cependant, une classe ne peut pas être synchronisée, donc lorsque nous disons que Hashtable est une carte synchronisée, cela signifie que les méthodes clés de la classe sont synchronisées. 

Bien que les deux soient pratiquement identiques, la différence réside dans la façon dont ils sont synchronisés et comment ils fonctionnent. Hashmap fonctionne mieux dans un environnement multi-threads tandis que le hashtable fonctionne mieux dans un seul environnement fileté.