Explication détaillée de Java Hashmap, Treemap et LinkedHashmap
Au cours de l'entretien ce matin, j'ai posé des questions sur les choses liées à Java et à la carte. Je me suis souvenu du contenu lié à Hashmap et Treemap à tort. Quand je suis revenu, j'ai rapidement essayé quelques démos pour comprendre.
Carte de package; import java.util. *; classe publique HashMaps {public static void main (String [] args) {map map = new hashmap (); map.put ("a", "aaa"); map.put ("b", "bbb"); map.put ("c", "ccc"); map.put ("d", "ddd"); Iterator iterator = map.KeySet (). Iterator (); while (iterator.hasnext ()) {objet key = iterator.next (); System.out.println ("map.get (key) est:" + map.get (key)); } Hashtable tab = new hashTable (); tab.put ("a", "aaa"); tab.put ("b", "bbb"); tab.put ("c", "ccc"); tab.put ("d", "ddd"); Iterator iterator_1 = tab.KeySet (). Iterator (); while (iterator_1.hasnext ()) {objet key = iterator_1.next (); System.out.println ("tab.get (key) est:" + tab.get (key)); } Treemap tmp = new Treemap (); tmp.put ("a", "aaa"); tmp.put ("b", "bbb"); tmp.put ("c", "ccc"); tmp.put ("d", "ddd"); tmp.put ("a", "aba"); Iterator iterator_2 = tmp.keyset (). Iterator (); while (iterator_2.hasnext ()) {objet key = iterator_2.next (); System.out.println ("tmp.get (key) est:" + tmp.get (key)); } LinkedHashmap <String, Integer> LinkedHashMap = new LinkedHashMap <String, Integer> (); LinkedHashmap.put ("Dasdsa", 1); LinkedHashMap.put ("GDSF", 2); LinkedHashmap.put ("TexVDFD", 3); LinkedHashmap.put ("Bdada", 4); LinkedHashmap.put ("GDSF", 3); for (String temp: linkedhashmap.KeySet ()) {System.out.println (temp); }}} La carte est différente de la liste. La couche sous-jacente utilise la forme de paires de valeurs clés pour stocker les données. Map.Entry est une sous-entrée interne. Différentes implémentations de MAP ont différents schémas d'index pour les paires de valeurs clés.
HashMap lui-même utilise la fonction de hachage pour indexer les valeurs de clé. Nous ne pouvons pas déterminer l'ordre des dernières valeurs clés.
Cependant, il existe un phénomène intéressant que lorsque vous utilisez Integer comme paire de valeurs clés, lorsque les chiffres sont à 1 chiffre, la valeur clé est disposée de petite à grande, et lorsque les chiffres s'élèvent à deux chiffres, il peut y avoir des problèmes.
Il y a un arbre équilibré à l'intérieur de Treemap pour stocker les indices de valeur clé. Treemap trie les valeurs clés en fonction de la fonction de comparaison. Je spécule qu'il peut y avoir un avltree à l'intérieur.
LinkedHashMap a une fonctionnalité selon laquelle les paires de valeurs clés sont triées dans l'ordre d'insertion. S'il y a des insertions répétées, elles sont enregistrées dans l'ordre de la première insertion. L'une des paroles sur Internet est qu'il y a deux hachages à l'intérieur de la structure.
L'un résout le problème de commande, l'autre résout le problème de stockage, la correction doit être confirmée
Hashmap et Treemap sont les deux structures de carte les plus couramment utilisées. D'une manière générale, le hashmap est relativement efficace et le plus courant. Ce n'est que si nous devons être commandés avec des valeurs clés, nous utiliserons Treemap.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!