Comparaison de performances entre TreeSet et HashSet en Java

Ce tutoriel explique toutes les différences et les caractéristiques communes entre TreeSet et HashSet. En effet, c'est une question très populaire dans les collections java, comme ArrayList vs Vector et HashTable vs HashMap. Probablement la différence la plus importante est la performance.

TreeSet vs HashSet

1) HashSet offre un temps de performance constant pour les opérations de base tels que: add, remove, contains et size. HashSet est plus rapide que TreeSet et elle sera un très bon choix si vous n'aurez pas besoin de trier les éléments, parce que HashSet ne dispose aucun moyen de tri. TreeSet garantie un temps de log(n) pour les opérations de base (addremove et contains).

2) HashSet ne garantie pas que les éléments soient triés. TreeSet garantie que les éléments soient ordonnés dans l'ordre croissant ou définie par l'interface Comparable ou autre celui que vous spécifiez dans le constructeur définie par l'interface Comparator de Java.

3) La performance de parcours dépend de la capacité initiale et le facteur de chargement(load factor) de HashSet. TreeSet n'a aucun paramètres qui influence la performance de parcours.

4) TreeSet offre des méthodes qui n'ont pas dans HashSet : first(), last(), headSet() et tailSet().

5) HashSet utilise la méthode equals() pour comparer deux objets et pour détecter les objets dupliqués. TreeSet utilise la méthode compareTo(). equals() retourne true si les deux objets sont égaux et compareTo() doit retourner zéro.

Les points communs entre TreeSet et HashSet en Java

HashSet et TreeSet ont beaucoup de choses qui sont communes, jetons un coups d’œil:

1) Les deux implémentent l'interface java.util.Set, ce qui signifie qu'ils ne permettent pas l'insertion des éléments dupliqués.

2) Les deux implémentations ne sont pas synchronisées. Vous pouvez les rendre synchronisées en utilisant la méthode Collections.synchronizedSet().

3) Si vous voulez un ensemble trié, c'est plus rapide d'ajouter des éléments à HashSet puis les convertir en TreeSet que de créer une TreeSet et ajouter des éléments.

A la fin, on peut dire que le choix d'utilisation dépend complètement de vos besoins.

Exemple de HashSet:

import java.util.HashSet;

public class exemple {

public static void main(String[] args) {

HashSet<String> hset = new HashSet<String>();

hset.add("1");
hset.add("3");
hset.add("2");
hset.add("5");

for(String s : hset)
System.out.println(s);
}
}

Résultat:
3
2
1
5
Exemple de TreeSet:

import java.util.TreeSet;

public class exemple {

public static void main(String[] args) {

TreeSet<String> tset = new TreeSet<String>();

tset.add("1");
tset.add("3");
tset.add("2");
tset.add("5");

for(String s : tset)
System.out.println(s);
}
}

Résultat:
1
2
3
5
Références:
Difference between HashSet and TreeSet in Java
Hashset vs Treeset