Quelle est la différence entre HashMap
, LinkedHashMap
et TreeMap
en Java? Je ne vois aucune différence dans la sortie comme tous les trois a keySet
et values
. Quels sont Hashtable
s?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
Hashtable
etHashMap
est que dans une table de hachage, "ni la clé ni la valeur ne peuvent être nulles". Cette contrainte n'existe pas sur ce dernier.Je préfère la présentation visuelle:
la source
Les trois représentent le mappage des clés uniques aux valeurs et implémentent donc l' interface Map .
HashMap est une carte basée sur le hachage des clés. Il prend en charge les opérations get / put O (1). Les clés doivent avoir des implémentations cohérentes de
hashCode()
etequals()
pour que cela fonctionne.LinkedHashMap est très similaire à HashMap, mais il ajoute la conscience à l'ordre auquel les éléments sont ajoutés (ou accédés), donc l'ordre d'itération est le même que l'ordre d'insertion (ou l'ordre d'accès, selon les paramètres de construction).
TreeMap est une cartographie basée sur un arbre. Ses opérations put / get prennent du temps O (log n). Il nécessite que les éléments disposent d'un mécanisme de comparaison, avec Comparable ou Comparator. L'ordre d'itération est déterminé par ce mécanisme.
la source
LinkedHashMap
va itérer dans l'ordre d'insertion, pas dans l'ordre naturel. Donc, si vous ajoutez(2,5,3)
à unLinkedHashMap
et faites un pour chacun par-dessus, il reviendra2,5,3
. Si elle était2,5,3
àTreeMap
elle revenir2,3,5
.Voyez où chaque classe se trouve dans la hiérarchie des classes dans le diagramme suivant (le plus grand ). TreeMap implémente
SortedMap
etNavigableMap
tandisHashMap
que non.HashTable
est obsolète et laConcurrentHashMap
classe correspondante doit être utilisée.la source
HashMap
HashTable
LinkedHashMap
TreeMap
la source
Juste un peu plus de ma propre expérience avec les cartes, sur quand j'utiliserais chacune:
removeEldestEntry()
méthode. Cela vous permet de créer un objet Cache qui peut expirer des données en utilisant certains critères que vous définissez.la source
Tous les trois classes
HashMap
,TreeMap
etLinkedHashMap
met en œuvre l'java.util.Map
interface, et représente la cartographie de clé unique aux valeurs.HashMap
A
HashMap
contient des valeurs basées sur la clé.Il ne contient que des éléments uniques.
Il peut avoir une clé null et plusieurs valeurs null.
Il ne maintient aucun ordre .
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
LinkedHashMap
LinkedHashMap
contient des valeurs basées sur la clé.C'est la même chose que HashMap maintient à la place l' ordre d'insertion . // Voir la décélération de classe ci-dessous
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
TreeMap
TreeMap
contient des valeurs basées sur la clé. Il implémente l'interface NavigableMap et étend la classe AbstractMap.Il est identique à la
HashMap
place qui maintient l' ordre croissant (trié en utilisant l'ordre naturel de sa clé.).public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
Hashtable
Il s'agit d'une classe héritée.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
Réf: http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html
la source
Regardez comment les performances varient ..
Carte arborescente qui est une implémentation de la carte triée. La complexité de l'opération put, get et containsKey est O (log n) en raison de l'ordre naturel
la source
@Amit:
SortedMap
est une interface alorsTreeMap
qu'une classe qui implémente l'SortedMap
interface. Cela signifie que suit le protocole quiSortedMap
demande à ses implémenteurs de le faire. Un arbre, sauf s'il est implémenté comme arbre de recherche, ne peut pas vous donner de données ordonnées car l'arbre peut être n'importe quel type d'arbre. Donc, pour que TreeMap fonctionne comme l'ordre trié, il implémente SortedMap (par exemple, l'arbre de recherche binaire - BST, BST équilibré comme AVL et RB Tree, même l'arbre de recherche ternaire - principalement utilisé pour les recherches itératives de manière ordonnée).En NUT-SHELL
HashMap
: donne des données en O (1), pas de classementTreeMap
: donne des données en O (log N), base 2. avec clés ordonnéesLinkedHashMap
: est une table de hachage avec une capacité de liste liée (pensez à Indexed-SkipList) pour stocker les données de la manière dont elles sont insérées dans l'arborescence. Idéal pour implémenter LRU (utilisé le moins récemment).la source
Voici la différence majeure entre HashMap et TreeMap
HashMap ne maintient aucune commande. En d'autres termes, HashMap ne fournit aucune garantie que l'élément inséré en premier sera imprimé en premier, alors que, tout comme TreeSet, les éléments TreeMap sont également triés selon l'ordre naturel de ses éléments.
L'implémentation HashMap interne utilise Hashing et TreeMap utilise en interne l'implémentation arborescente Rouge-Noir.
HashMap peut stocker une clé nulle et plusieurs valeurs nulles. TreeMap ne peut pas contenir de clés nulles mais peut contenir de nombreuses valeurs nulles.
HashMap prend des performances à temps constant pour les opérations de base telles que get and put, c'est-à-dire O (1) .Selon Oracle docs, TreeMap fournit un coût en temps log (n) garanti pour la méthode get and put.
HashMap est beaucoup plus rapide que TreeMap, car le temps de performance de HashMap est constant par rapport au temps de journalisation TreeMap pour la plupart des opérations.
HashMap utilise la méthode equals () en comparaison tandis que TreeMap utilise la méthode compareTo () pour maintenir l'ordre.
HashMap implémente l'interface Map tandis que TreeMap implémente l'interface NavigableMap.
la source
Ce sont différentes implémentations de la même interface. Chaque implémentation présente des avantages et des inconvénients (insertion rapide, recherche lente) ou vice versa.
Pour plus de détails, consultez le javadoc de TreeMap , HashMap , LinkedHashMap .
la source
La carte de hachage ne conserve pas l'ordre d'insertion.
Exemple. Hashmap Si vous insérez des clés comme
Il peut le stocker sous
Hashmap lié préserve l'ordre d'insertion.
Exemple.
Si vous insérez des clés
Il le stockera sous
même que nous insérons.
La carte arborescente stocke les valeurs dans l'ordre croissant des clés. Exemple.
Si vous insérez des clés
Il le stockera sous
la source
HashMap:
LinkedHashMap:
TreeMap:
la source
Tous offrent une carte clé-> valeur et un moyen de parcourir les clés. La distinction la plus importante entre ces classes est la garantie de temps et la commande des clés.
Imaginez que vous avez passé un TreeMap, HashMap et LinkedHashMap vide dans la fonction suivante:
La sortie de chacun ressemblera aux résultats ci-dessous.
Pour HashMap, la sortie était, dans mes propres tests, {0, 1, -1}, mais cela pouvait être n'importe quel ordre. Il n'y a aucune garantie sur la commande.
Treemap, la sortie était, {-1, 0, 1}
LinkedList, la sortie était, {1, -1, 0}
la source
Bien qu'il existe de nombreuses excellentes réponses ici, je voudrais présenter mon propre tableau décrivant les différentes
Map
implémentations fournies avec Java 11.Nous pouvons voir ces différences répertoriées sur le graphique du tableau:
HashMap
est l' usage généralMap
couramment utilisé lorsque vous n'avez pas de besoins particuliers.LinkedHashMap
étendHashMap
, en ajoutant ce comportement: Gère un ordre, l' ordre dans lequel les entrées ont été ajoutées à l'origine . La modification de la valeur pour la saisie de valeur-clé ne modifie pas sa place dans l'ordre.TreeMap
maintient également un ordre, mais utilise soit (a) l'ordre «naturel» , c'est-à-dire la valeur de lacompareTo
méthode sur les objets clés définis sur l'Comparable
interface, soit (b) appelle uneComparator
implémentation que vous fournissez.TreeMap
implémente à la fois l'SortedMap
interface et son successeur, l'NavigableMap
interface.TreeMap
n'autorise pas un NULL comme clé , tandis queHashMap
&LinkedHashMap
do.HashTable
est hérité de Java 1 . Supplanté par laConcurrentHashMap
classe. Citant le Javadoc:ConcurrentHashMap
obéit à la même spécification fonctionnelle queHashtable
, et inclut des versions de méthodes correspondant à chaque méthode deHashtable
.la source
HashMap
peut contenir une clé nulle.
HashMap ne maintient aucune commande.
TreeMap
TreeMap ne peut contenir aucune clé nulle.
TreeMap maintient l'ordre croissant.
LinkedHashMap
LinkedHashMap peut être utilisé pour maintenir l'ordre d'insertion, sur lequel les clés sont insérées dans la carte ou il peut également être utilisé pour maintenir un ordre d'accès, sur lequel les clés sont accessibles.
Exemples ::
1) Carte HashMap = nouveau HashMap ();
2) Carte TreeMap = nouveau TreeMap ();
3) Carte LinkedHashMap = nouvelle LinkedHashMap ();
la source
Le plus important parmi les trois est de savoir comment ils enregistrent l'ordre des entrées.
HashMap
- N'enregistre pas l'ordre des entrées. par exemple.LinkedHashMap
: Il enregistre l'ordre dans lequel les entrées ont été effectuées. par exemple:TreeMap
: Il enregistre les entrées dans l'ordre croissant des touches. par exemple:la source