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

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

黄舟
Libérer: 2017-03-14 11:56:00
original
1828 Les gens l'ont consulté


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;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
Copier après la connexion
Ceci, nous pouvons utiliser Collections.

sort( personList ) pour trier.


Implémentez l'interface Comparator :

public class Person{
     private String name;     private int age
}
Copier après la connexion
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;    // 名字不一样, 返回比较名字的结果.
          }
     }
}
Copier après la connexion
À 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;
}
Copier après la connexion
Ici, la classe HonorPerson ne peut pas implémenter à nouveau l'interface Comparable 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>{}
Copier après la connexion
 
public class HonorPersonComparator implements Comparator<HonorPerson>{}
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal