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.







