Comment trier une HashSet en java

HashSet ne préserve pas l'ordre des éléments, toutefois on peut convertir HashSet et ordonner les éléments dans l'ordre croissant avec deux méthodes: en utilisant la méthode Collections.sort() ou en copiant les éléments dans une TreeSet.

1) Trier HashSet avec Collections.sort()

La méthode Collections.sort() permet de trier les collections d'objets qui implémentent l'interface java.util.List. Vous devriez copier les éléments de HashSet dans l'un des collections: ArrayList, LinkedList ou Vector. On va utiliser la classe ArrayList qui est la plus simple,  Ensuite, on appelle la méthode Collections.sort() sur notre ArrayList.

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

public class TriHashSet {

public static void main(String[] args) {
//créer une hashset
HashSet<String> hset = new HashSet<String>();

//ajouter des éléments
hset.add("a2");
hset.add("a3");
hset.add("b1");
hset.add("b3");
hset.add("a1");
hset.add("b2");

System.out.println("Avant le tri: ");
for(String s : hset)
System.out.println(s);

//copier les éléments de HashSet dans ArrayList
List<String> list = new ArrayList<String>(hset);
Collections.sort(list);

System.out.println("Après le tri: ");
for(String s : hset)
System.out.println(s);
}
}
Sortie:

Avant le tri: 
b1
a1
b3
b2
a2
a3
Après le tri:
b1
a1
b3
b2
a2
a3

1) Trier HashSet en utilisant TreeSet

L'utilisation de TreeSet est très simple. Il suffit de créer une instance de TreeSet avec comme argument la liste HashSet.

import java.util.HashSet;
import java.util.TreeSet;

public class TriHashSetTreeMap {

public static void main(String[] args) {
//créer une hashset
HashSet hset = new HashSet();

//ajouter des éléments
hset.add(5);
hset.add(16);
hset.add(8);
hset.add(22);
hset.add(14);
hset.add(11);

System.out.println("Avant le tri: "+hset);
for(int n : hset)
System.out.println(n);

//copier les éléments de HashSet dans ArrayList
TreeSet treeset = new TreeSet<>(hset);

System.out.println("Après le tri: "+treeset);
for(int n : treeset)
System.out.println(n);
}
}
Sortie:

Avant le tri: [16, 5, 22, 8, 11, 14]
16
5
22
8
11
14
Après le tri: [5, 8, 11, 14, 16, 22]
5
8
11
14
16
22