Différences entre HashMap et TreeMap en Java
HashMap et TreeMap en Java
Tout d'abord, nous verrons en quoi TreeMap diffère de HashMap en Java ?
Carte arborescente
- Cette classe est disponible dans le package java.util.
- Cette classe est une classe d'implémentation de l'interface Map.
- La structure de données sous-jacente de TreeMap est l'arbre ROUGE-NOIR.
- Dans TreeMap "l'ordre d'insertion des éléments" n'est pas conservé car les éléments seront insérés selon un ordre de tri des clés (ici le tri sera effectué en fonction des clés).
- Dans TreeMap, l'objet est représenté comme un groupe d'éléments sous la forme d'une paire clé-valeur.
- Dans TreeMap "l'insertion de doublons n'est pas possible" pour les clés (c'est-à-dire qu'il n'est pas autorisé d'insérer des éléments en double pour les clés).
- Dans TreeMap "l'insertion de doublons est possible" pour les valeurs (c'est-à-dire qu'il est permis d'insérer des éléments en double pour les valeurs ou qu'il n'y a pas de restrictions sur les valeurs).
- Dans TreeMap le tri se fera de deux types :
- Tri naturel par défaut (ordre croissant)
- Tri personnalisé (croissant ou décroissant)
- Dans le tri naturel par défaut, les "clés TreeMap" doivent être homogènes et comparables.
- Dans le tri personnalisé, les "clés TreeMap" n'ont pas besoin d'être homogènes et comparables.
- Dans TreeMap "l'insertion nulle est possible" pour les clés en tant que premiers éléments ou en d'autres termes si nous insérons null après le premier élément, nous obtiendrons une exception.
- Dans TreeMap "l'insertion nulle n'est pas possible" pour les clés de Map non vide.
Exemple :
// Java program to demonstrate the behavior of TreeMap import java.util.*; class TreeMapClass { public static void main(String[] args) { // Creating an instance of TreeMap TreeMap tm = new TreeMap(); // By using put() to add elements in TreeMap tm.put(1, "Java"); tm.put(3, "C"); tm.put(2, "C++"); tm.put(4, "Java"); tm.put(6, null); tm.put(7, 10); tm.put(2, "Ruby"); /* tm.put("Java" , "is a programming"); Here hetrogenous object is not allowed for keys */ /* tm.put(null , "Python"); Here null insertion for keys is not possible for non-empty TreeMap */ /* tm.put(2 , "Ruby"); Here we will not get any exception but only one will be considerable */ // Display Current TreeMap System.out.println("Display Current TreeMap is :" + tm); } }
Sortie
E:\Programs>javac TreeMapClass.java E:\Programs>java TreeMapClass Display Current TreeMap is :{1=Java, 2=Ruby, 3=C, 4=Java, 6=null, 7=10}
Deuxièmement, nous verrons comment HashMap diffère de TreeMap en Java ?
HashMap
- Cette classe est disponible dans le package java.util.
- Cette classe est une classe d'implémentation de l'interface Map.
- La structure de données sous-jacente de HashMap est Hashtable.
- HashMap est un parent de LinkedHashMap.
- Dans HashMap, "l'ordre d'insertion des éléments" n'est pas conservé car les éléments seront insérés en fonction d'un hashCode de clés (c'est-à-dire que l'ordre d'insertion n'a pas besoin d'être le même que l'ordre de récupération).
- Dans HashMap, l'objet est représenté comme un groupe d'éléments sous la forme d'une paire clé-valeur.
- Dans HashMap "l'insertion de doublons n'est pas possible" pour les clés (c'est-à-dire qu'il n'est pas autorisé d'insérer des éléments en double pour les clés).
- Dans HashMap "l'insertion de doublons est possible" pour les valeurs (c'est-à-dire qu'il est permis d'insérer des éléments en double pour les valeurs ou qu'il n'y a pas de restrictions sur les valeurs).
- Dans HashMap "l'insertion nulle est possible" pour les clés et les valeurs, mais une fois pour les clés et plusieurs pour les valeurs.
- Dans HashMap, les "objets hétérogènes" sont autorisés pour les clés et les valeurs.
Exemple :
// Java program to demonstrate the behavior of HashMap import java.util.Collection; import java.util.HashMap; class HashMapClass { public static void main(String[] args) { // Creating an instance of HashMap HashMap hm = new HashMap(); //By using put() method to add some values in HashMap hm.put("Java", 1000); hm.put("C", 2000); hm.put("C++", 3000); hm.put("Ruby", 4000); hm.put("Python", 1000); hm.put("null", null); hm.put("Django", null); /* hm.put("null",null); Here we will not get any error but one null is accepted for keys*/ // Display retrieval order of HashMap System.out.println("Current HashMap list is :" + hm); // by using values() to find values of HashMap Collection values = hm.values(); // Display Values of HashMap System.out.println("Current HashMap Key values is :" + values); } }
Sortie
E:\Programs>javac HashMapClass.java E:\Programs>java HashMapClass Current HashMap list is :{Ruby=4000, C=2000, Django=null, Python=1000, C++=3000, null=null, Java=1000} Current HashMap Key values is :[4000, 2000, null, 1000, 3000, null, 1000].