Différence entre HashSet et TreeSet
La différence la plus importante entre HashSet et TreeSet est la performance. HashSet est plus rapide que TreeSet, ce qui signifie que si vous avez besoin de performances, utilisez HashSet, mais HashSet ne fournit aucun ordre. Par conséquent, si vous avez besoin que les élements soient ordonnés, vous devez passer à TreeSet, qui permet de trier les clés. Le tri peut être un ordre naturel défini par une interface « Comparable » ou tout ordre particulier défini par une interface « Comparator » en Java.
Table de comparaison
HashSet | TreeSet | |
---|---|---|
Order/Tri | HashSet ne fournit aucune garantie d’order | TreeSet fournit une garantie d’order |
Comparaison | HashSet utilise la méthode equals() pour la comparaison | TreeSet utilise la méthode compareTo() pour la comparaison |
Élément nul | HashSet autorise un élément null | TreeSet n’autorise pas les objets nuls |
Implémentation | Implémenté en interne avec HashMap | Implémenté en interne en utilisant TreeMap |
Performance | HashSet est plus rapide [complexité temporelle O(1)] | TreeSet est plus lent pour la plupart des applications, telles que l’ajout, la suppression et la recherche. [complexité temporelle de O(log (n))]. |
Exemple de HashSet
import java.util.HashSet; class HashSetExemple { public static void main(String[] args) { // Créer un objet HashSet HashSet<String> hashset = new HashSet<String>(); // Ajouter des éléments dans HashSet hashset.add("fraise"); hashset.add("orange"); hashset.add("pomme"); // HashSet autorise une valeur null hashset.add(null); // La duplication est supprimée hashset.add("pomme"); // Afficher les éléments de HashSet System.out.println("HashSet contient: "); for (String tmp : hashset) { System.out.println(tmp); } } }
La sortie:
HashSet contient: pomme fraise orange
Exemple de TreeSet
import java.util.TreeSet; class TreeSetExemple { public static void main(String[] args) { // Créer un objet TreeSet TreeSet<String> treeset = new TreeSet<String>(); // Ajouter des éléments dans TreeSet treeset.add("pomme"); treeset.add("orange"); treeset.add("fraise"); // HashSet n'autorise pas les valeurs null //treeset.add(null); //Java.lang.NullPointerException // La duplication est supprimée treeset.add("pomme"); // Afficher les éléments de TreeSet System.out.println("TreeSet contient: "); for (String tmp : treeset) { System.out.println(tmp); } } }
La sortie:
TreeSet contient: fraise orange pomme
Les points communs entre HashSet et TreeSet en Java
- HashSet et TreeSet les deux implémentent l’interface java.util.Set, ce qui signifie qu’ils respectent le contrat de l’interface Set et n’autorisent aucune duplication.
- HashSet et TreeSet ne sont ni thread-safe ni synchronisés. Bien que vous puissiez les rendre synchronisés à l’aide de la méthode
Collections.synchronizedSet()
. - Le troisième point commun entre TreeSet et HashSet est que l’itérateur des deux classes est de nature rapide. Ils lèveront une exception ConcurrentModificationException si l’itérateur est modifié une fois que l’Iterator est créé. cela n’est pas garanti et le code de l’application ne doit pas s’appuyer sur ce code.