Introduction comparable
Comparable est l'interface de tri.
Si une classe implémente l'interface comparable, cela signifie "cette classe prend en charge le tri". Étant donné que les classes qui implémentent l'interface comparable prennent en charge le tri, en supposant qu'il existe désormais une "liste de liste (ou un tableau) d'objets de classes qui implémentent une interface comparable", la liste de liste (ou le tableau) peut être triée par Collection.sort (ou Arrays.sort).
De plus, "l'objet de la classe qui implémente l'interface comparable" peut être utilisé comme clé dans "la carte ordonnée (comme Treemap)" ou un élément dans "Set ordonné (arreset)" sans spécifier un comparateur.
1. Comparateur et comparable sont les mêmes
Ce sont toutes des interfaces Java et sont utilisées pour comparer les tailles des classes personnalisées.
Qu'est-ce qu'une classe personnalisée: comme la classe publique Person {String Name; Int Âge}.
Lorsque nous avons une telle liste de personnes, qui contient Person1, Person2, Person3 ......, nous utilisons des collections.Sort (Personlist),
Le résultat attendu n'est pas obtenu. Quelqu'un doit demander à ce moment, pourquoi pouvons-nous trier une liste de cordes:
Par exemple, StringList {"Hello1", "Hello3", "Hello2"}, Collection.Sort (StringList) peut obtenir le tri correct, c'est parce que
L'objet String nous a aidés à implémenter l'interface comparable, donc si notre personne veut trier, nous devons également implémenter un comparateur.
2. La différence entre le comparateur et comparable
Comparable
Comparable est défini à l'intérieur de la classe de personne:
La classe publique Persion implémente comparable {.. compare la taille de la personne ...},
Parce que le comparateur a été mis en œuvre, notre personne est maintenant un objet qui peut comparer les tailles. Sa fonction de comparaison est exactement la même que la chaîne, et elle peut être comparée à tout moment et n'importe où, car la personne a maintenant une taille différente. Collection.Sort (PersonList) peut obtenir le résultat correct.
Comparateur
Le comparateur est défini en dehors de la personne. Pour le moment, la structure de notre classe de personne n'a pas besoin de modifier des changements, tels que
classe publique Personne {nom de chaîne; en âge},Ensuite, nous définissons un autre comparateur:
Public Personcomparator implémente le comparateur () {.. compare la taille de la personne ...}, Comment comparer les tailles de deux personnes dans le comparateur de la personne. Donc, en utilisant cette méthode, lorsque nous voulons trier une liste de personnes,
En plus de passer Personlist, nous devons également passer le comparateur de la personne, car comment comparer la taille de la personne est dans le comparateur de la personne
Mis en œuvre dans, comme:
Collection.Sort (PersonList, New PersonComparator ()).
3. Exemples de comparateur et comparable
Comparable:
Pour implémenter l'interface comparable, vous devez remplacer la méthode compareto. Implémentez la comparaison dans la méthode compareto:
La classe publique Personne implémente comparable {nom de chaîne; int Âge; public int compareto (personne autre) {int i = 0; i = name.compareto (another.name); // Comparaison à l'aide de chaînes if (i == 0) {// Si les noms sont les mêmes, comparez l'âge, le résultat de l'âge de retour âge - un autre.age;} else {return i; // Les noms sont différents, renvoyez le résultat de la comparaison des noms.}}}Pour le moment, nous pouvons le trier directement avec Collection.Sort (PersonList).
Comparateur:
La mise en œuvre du comparateur nécessite de remplacer la méthode de comparaison:
Public class Person {String Name; int Age;} class PersonComparator implémente le comparateur <ponse> {public int compare (personne un, personne un autre) {int i = 0; i = one.name.compareto (an autre.name); // Comparaison à l'aide de chaînes si (i == 0) {// Si le nom est le même, comparez l'âge, renvoyez le résultat de la comparaison de l'âge return un.age - Another.age;} else {return i; // Les noms sont différents, renvoyez le résultat de la comparaison des noms.}}} Collection.Sort (PersonList, New PersonComparator ()) Il peut être trié4: Résumé
Les deux méthodes ont leurs propres avantages et inconvénients. Il est simple d'utiliser comparable. Tant que l'objet qui implémente l'interface comparable devient un objet comparable,
Cependant, le code source doit être modifié. L'avantage de l'utilisation du comparateur est qu'il n'a pas besoin de modifier le code source, mais implémente également un comparateur. Lorsqu'un objet personnalisé doit être comparé, le comparateur et l'objet peuvent être passés ensemble pour comparer la taille. Dans le comparateur, les utilisateurs peuvent implémenter une logique complexe et générale par eux-mêmes, afin qu'ils puissent correspondre à certains objets relativement simples, ce qui peut économiser beaucoup de travail répétitif.