Si vous souhaitez trier, vous pouvez utiliser TreeSet au lieu de HashSet, mais parfois vous souhaitez donner votre propre ordre d'origine. Comparator et Compareable sont efficaces dans un tel cas.
Comparable
java.lang.Comparable 
Myclass.java
class MyClass implements Comparable<Myclass>{
  //Implémentation de méthodes abstraites
  public int compareTo(Myclass obj){
    return this.id - obj.id; 
  }
}
//ordre croissant
Comparator Interface java.util.Comparator "Comparateur" La motivation pour utiliser Comparator est lorsque vous souhaitez modifier l'ordre de tri des éléments stockés dans TreeSet, TreeMap, etc. dans un ordre différent de celui par défaut.
Myclass.java
class Myclass implements Comparator<String>{
  @Override 
  public int compare(String obj1, String obj2){
     return obj1.length() - obj2.length();
  }
}
//ordre croissant
| constructeur | La description | 
|---|---|
| TreeSet(Comparator<? super E> comparator) | Crée un nouvel ensemble d'arbres vide trié selon le comparateur spécifié | 
Le TreeSet déclare un constructeur qui prend un objet Comparator comme argument (décrit dans OraDocs), donc n'importe quel ordre de tri peut être appliqué.
Comparable "Comparez-vous avec d'autres objets" Comparateur "Compare deux autres objets" (Remarque: les définitions de TreeSet et TreeMap peuvent être vagues plutôt que déroutantes pour Compareable et Comparator)