Comment écrivez-vous comparable en java?

Comment écrivez-vous comparable en java?
Des exemples de listes Java sont; Vector, Stack, AttributeLlist, ArrayList et LinkedList. La classe Java Collections a surchargé des méthodes pour trier une liste d'objets prédéfinis. La classe Java Arrays a surchargé des méthodes pour trier un tableau d'objets prédéfinis.

Les méthodes prédéfinies Sort () sont de trier les objets prédéfinis. Qu'en est-il des objets définis par l'utilisateur? Java a une interface appelée comparable. Une interface est une sorte de classe dont les méthodes sont des déclarations sans définitions (corps). Ainsi, une classe doit être implémentée à partir d'une interface pour la définition des méthodes (donnant des corps). À partir de la classe implémentée, les objets peuvent être instanciés à partir d'un nom donné par le programmeur.

Java a une classe comparable prédéfinie. Les méthodes tri () dans les collections et les tableaux utilisent la classe comparable prédéfinie pour trier les objets prédéfinis. Cependant, afin de trier une liste ou une table d'objets définis par l'utilisateur, le programmeur doit implémenter (définir) une classe comparable utilisateur à partir de l'interface comparable. Cette classe (définie) implémentée (définie) permet le tri d'objets définis par l'utilisateur dans une liste ou un tableau. Ainsi, une classe comparable prédéfinie permet le tri des objets prédéfinis, tandis qu'une classe comparable définie par l'utilisateur permet le tri des objets définis par l'utilisateur. Les objets définis par l'utilisateur ne sont pas des littéraux, donc une classe d'objets définis par l'utilisateur a besoin de sa propre implémentation comparable définie par l'utilisateur.

Cet article illustre comment écrire comparable en java.

Exemple de classe définie par l'utilisateur

La classe définie par l'utilisateur implémente réellement l'interface comparable. L'interface comparable n'a qu'une seule méthode, qui est,

int compareto (t o)

Il est défini (étant donné un corps) à trier ascendant ou défini pour trier descendant. Il renvoie un entier négatif, ou zéro, ou un entier positif, car son objet est inférieur, égal ou supérieur à l'objet spécifié.

Cette classe d'intérêt, implémentée à partir de l'interface comparable, est la classe définie par l'utilisateur avec maintenant une méthode de comparaison définie (). Ce n'est pas une classe complète définie par l'utilisateur, cependant. Il peut avoir d'autres méthodes et propriétés (champs) qui lui sont propres, selon le programmeur. Les objets instanciés de cette classe implémentée par l'utilisateur seront les objets de la liste ou du tableau à tri. Chaque objet a la même méthode compareto () dans le tri, qui contrôle le tri.

Exemple de classe

Le code suivant montre une classe définie par l'utilisateur pour les employés, à partir de laquelle les objets (employés) seront instanciés. Pour que les objets soient triés, l'employé de classe met en œuvre une interface comparable et définit (donne un corps) la méthode compareto () comme une méthode spéciale de la classe.

L'employé de classe implémente comparable
String fname; en âge;
Employé (String Fname, int Age)
ce.fname = fName;
ce.âge = âge;

public int compareto (employé EMP)
si (âge < emp.age)
retour -1;
sinon si (âge == emp.âge)
retour 0;
autre
retour +1;

Il n'y a pas de véritable objet littéral ici. L'intention est de devoir trier les employés par âge, en montant. Cela compare également l'employé par âge. Et donc la comparaison () doit être définie. Cette définition est pour le tri. Dans cette méthode, le corps (définition), l'âge et l'EMP.âge, reportez-vous à deux éléments différents de la liste ou du tableau. L'âge fait référence à l'élément avant EMP.âge .

Une méthode Main () appropriée pour cela est:

public static void main (String [] args)
Liste des tableaux Al = Nouveau ArrayList();
Al.Add (nouvel employé ("John", 40)); Al.Ajouter (nouvel employé ("Peter", 50));
Al.Ajouter (nouvel employé ("Christopher", 30));
Collections.tri (al);
pour (int i = 0; iSystème.dehors.println (Al.obtenir (i).fname + "+ al.obtenir (i).âge);

Lisez le code. La sortie est:

Christopher 30
Jean 40
Pierre 50

trié ascendant, par âge.

Tri descendant

La définition de la méthode comparative () ci-dessus est pour ascendant. Pour le faire trier descendant, codez-le comme suit:

public int compareto (employé EMP)
si (âge < emp.age)
retour +1;
sinon si (âge == emp.âge)
retour 0;
autre
retour -1;

Noter que < has not been changed. However, -1 returned has been changed to +1; and +1 returned has been changed to -1. With this, the output for the above specific list is:

Pierre 50
Jean 40
Christopher 30

trié descendant, par âge.

Comparable pour le tableau

Une classe comparable pour un tableau est la même qu'une classe comparable pour une liste, comme expliqué ci-dessus. La classe est un programmeur implémenté une classe qui implémente l'interface comparable. Cette classe implémentée par programme. Les objets instanciés de cette classe deviennent les objets du tableau. La méthode de comparaison définie contrôle leur tri.

La méthode principale suivante, trie un tableau des mêmes employés ci-dessus, ascendant:

Employé [] Arr = nouvel employé [3];
arr [0] = nouvel employé ("John", 40); arr [1] = nouvel employé ("Peter", 50);
arr [2] = nouvel employé ("Christopher", 30);
Tableaux.tri (arr);
pour (int i = 0; iSystème.dehors.println (arr [i].fname + "+ arr [i].âge);

Notez qu'au lieu de,

Collections.tri (al);

il y a,

Tableaux.tri (arr);

Cette fois, car un tableau n'est pas vraiment une liste. La sortie doit être

Christopher 30
Jean 40
Pierre 50

ascendant, par âge. C'est à la condition que le corps de la méthode compareto () est:

public int compareto (employé EMP)
si (âge < emp.age)
retour -1;
sinon si (âge == emp.âge)
retour 0;
autre
retour +1;

Si le corps était,

public int compareto (employé EMP)
si (âge < emp.age)
retour +1;
sinon si (âge == emp.âge)
retour 0;
autre
retour -1;

Ensuite, le tableau serait trié descendant pour entraîner la sortie:

Pierre 50
Jean 40
Christopher 30

Conclusion

La classe comparable prédéfinie permet le tri d'objets prédéfinis, tandis que la classe comparable définie par l'utilisateur permet le tri d'objets définis par l'utilisateur. Les objets définis par l'utilisateur ne sont pas des littéraux, donc une classe d'objets définis par l'utilisateur a besoin de sa propre implémentation comparable définie par l'utilisateur.

La classe d'intérêt, dont les objets doivent être instanciés, doit implémenter l'interface comparable. L'interface comparable a la méthode compareto (), qui doit être définie dans la classe pour le tri ascendant ou descendant (inverse). C'est cette méthode qui contrôle le tri dans la liste ou le tableau.

La même classe comparable pour trier une liste peut être utilisée pour trier un tableau. La classe est un programmeur implémenté une classe qui implémente l'interface comparable. Cette classe implémentée par programme. Les objets instanciés de cette classe deviennent les objets du tableau.