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
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.
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!