Maison >Java >javaDidacticiel >HashMap, LinkedHashMap et TreeMap en Java : quelles sont les principales différences et quand les utiliser ?

HashMap, LinkedHashMap et TreeMap en Java : quelles sont les principales différences et quand les utiliser ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 22:39:16656parcourir

HashMap, LinkedHashMap, and TreeMap in Java: What are the Key Differences and When to Use Each?

Naviguer dans les nuances de HashMap, LinkedHashMap et TreeMap en Java

Intro

As en tant que développeur Java, il est crucial de comprendre les distinctions entre les différentes structures de données, y compris trois options courantes : HashMap, LinkedHashMap et TreeMap. Bien qu'ils implémentent tous l'interface Map, ils présentent des caractéristiques uniques qui ont un impact sur leurs fonctionnalités et leurs performances.

Différences fondamentales

  • Ordre des itérations : HashMap ne garantit pas un ordre d'itération, tandis que LinkedHashMap maintient l'ordre d'insertion et TreeMap itère en fonction de la clé tri.
  • Complexité : HashMap offre une complexité O(1) pour les opérations get/put/remove/containsKey, tandis que TreeMap fonctionne en O(log(n)) en raison de sa nature triée.
  • Valeurs/Clés nulles : HashMap et LinkedHashMap autorisent les deux valeurs nulles valeurs et clés, mais TreeMap n'autorise que les valeurs non nulles.
  • Comportement Fail-Fast : La propriété Fail-Fast n'est garantie pour aucune de ces structures de données en raison du potentiel de conflits simultanés. modification.

Mise en œuvre sous-jacente et Synchronisation :

  • HashMap utilise un mécanisme de compartiment pour le stockage des données, tandis que LinkedHashMap utilise des compartiments à double liaison pour préserver l'ordre d'insertion. TreeMap est implémenté à l'aide d'un arbre rouge-noir pour le stockage trié.
  • Aucune de ces structures de données n'est intrinsèquement synchronisée, nécessitant une synchronisation explicite pour le contrôle d'accès simultané.

Exemple d'utilisation et Sortie :

L'extrait de code fourni illustre le comportement de HashMap, LinkedHashMap, et TreeMap :

// HashMap (unsorted key order)
Map<String, String> m1 = new HashMap<>();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
System.out.println(m1.keySet());  // [schildt, mathew, map]
System.out.println(m1.values()); // [java2s, Hyden, HashMap]

// TreeMap (sorted key order)
SortedMap<String, String> sm = new TreeMap<>();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
System.out.println(sm.keySet());  // [map, mathew, schildt]
System.out.println(sm.values()); // [TreeMap, Hyden, java2s]

// LinkedHashMap (insertion order)
LinkedHashMap<String, String> lm = new LinkedHashMap<>();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
System.out.println(lm.keySet());  // [map, schildt, mathew]
System.out.println(lm.values()); // [LinkedHashMap, java2, Hyden]

Hashtables : une structure de données héritée

Avant Java 1.2, les tables de hachage étaient répandues mais sont désormais obsolètes en raison des fonctionnalités plus sophistiquées fournies par HashMaps. . Les tables de hachage présentent un comportement similaire à celui des HashMaps, mais :

  • Sont synchronisées, ce qui peut avoir un impact sur les performances dans les environnements multithread.
  • Implémentez l'ancienne interface Dictionary au lieu de Map.
  • Exiger un transtypage de type explicite lors de l'accès aux éléments.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn