[JAVA] Comparable et Comparator (commande d'objets)

Très perturbant

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 Interface "Comparable" (1) La classe TreeSet effectue le processus de conversion en __Comparable type __ lors de la réorganisation des éléments en interne. (2) Les classes de valeur telles que la classe String et la classe Integer de la bibliothèque standard implémentent l'interface 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é.

Résumé

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)

Recommended Posts

Comparable et Comparator (commande d'objets)
objets mutables et immuables
[Java8] Utilisation appropriée de Compareable et Comparator du point de vue du tri des employés