Maison  >  Article  >  Java  >  Description détaillée des différences entre Java Comparator et Comparable

Description détaillée des différences entre Java Comparator et Comparable

黄舟
黄舟original
2017-03-14 11:56:001751parcourir


1. Similitudes entre Comparateur et Comparable

  • Comparable et Comparateur sont tous deux utilisés pour comparer et trier les éléments d'une collection ;

  • Comparable et Comparator sont tous deux java interface, Comparable se trouve sous le package java.lang et Comparator se trouve sous le package java.util

  • La classe personnalisée implémente l'une des deux pour comparer les tailles.


2. Différences entre Comparateur et Comparable

  • Comparable est généralement défini à l'intérieur de la classe, tandis que Comparateur est généralement défini en dehors de la classe. ;

  • Pour implémenter l'interface Comparable, vous devez réécrire sa méthode

    compareTo, et pour implémenter l'interface Comparator, vous devez réécrire sa méthode compare


implémente l'interface Comparable :

public class Person implements Comparable<Person> {

     private String name;     private int age;     @Override
     public int compareTo(Person another) {          int i = 0;
          i = name.compareTo(another.name);     // 使用String的compareTo方法
          if(i == 0) {      // 如果名字一样,比较年龄, 返回比较年龄结果
               return age - another.age;
          } else {               return i;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
Ceci, nous pouvons utiliser Collections.

sort( personList ) pour trier.


Implémentez l'interface Comparator :

public class Person{
     private String name;     private int age
}
public class PersonComparator implements Comparator<Person> { 
     public int compare(Person one, Person another) {          int i = 0;
          i = one.name.compareTo(another.name);     // 使用String的compareTo方法
          if(i == 0) {      // 如果名字一样,比较年龄,返回比较年龄结果
               return one.age - another.age;
          } else {               return i;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
À ce stade, nous pouvons utiliser Collections.sort(personList ,

new PersonComparator()) pour le tri.


3. Résumé

  • L'utilisation de Comparable est relativement simple, tant que l' objet qui implémente le L'interface comparable devient directement un objet comparable, mais doit modifier le code source, ce qui entraînera un couplage de code élevé, ce qui affectera sérieusement l'évolutivité du code  ; >

  • L'avantage d'utiliser Comparator est que n'a pas besoin de modifier le code source, et le code ne sera pas fortement couplé , mais implémentez un autre comparateur Lorsqu'un objet personnalisé doit être comparé, le comparateur et l'objet peuvent être passés ensemble pour comparer la taille

Ainsi, du point de vue de l'évolutivité du code, il serait préférable d'implémenter l'interface Comparator pour trier les éléments dans le conteneur.  Regardez l'exemple suivant :

 
public class HonorPerson extends Person{
     private String name;     private int age;     private STring degree;
}
Ici, la classe HonorPerson ne peut pas implémenter à nouveau l'interface Comparablec3310a069bd6a16d43d6d878a06afc39 Ceci, en d'autres termes, la classe HonorPerson ne peut utiliser que la méthode de comparaison de la classe Person et ne peut pas définir sa propre méthode de comparaison.

public class PersonComparator implements Comparator<Person>{}
 
public class HonorPersonComparator implements Comparator<HonorPerson>{}
Ici, HonorPerson et Person ont chacun leurs propres méthodes de comparaison et ne s'affectent ni n'entrent en conflit les uns avec les autres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn