Présentation de l'exemple comparable en Java

Comparable en Java est une interférence utilisée pour comparer des objets actuels avec d'autres objets du même type. Cette comparaison peut être utilisée pour trier les éléments d'une collection. Vous devrez implémenter l'interface dans une classe pour la rendre triable ou «comparable». Vous devrez implémenter une seule méthode «compareTo». Cet ordre de tout type est appelé ordre naturel et la méthode "compareTo" implémentée est appelée méthode de comparaison naturelle. Ici, dans cet article Comparable in Java Example, nous examinerons les différents exemples de comparables en java.

Déclaration:

Interface comparable

Pour implémenter cette interface, vous devez implémenter cette méthode:

public int compareTo(To);

Paramètres:

T - est le type d'objet auquel cet objet est comparé.

Valeur de retour:

La méthode compareTo renvoie 0 si l'objet spécifié et cet objet sont égaux, renvoie un entier négatif si cet objet est inférieur à l'objet spécifié et renvoie un entier positif si cet objet est supérieur à l'objet spécifié.

Jette:

ClasscastException - Si l'objet passé à cette méthode est nul

NullPointerException - Si l'objet transmis à cette méthode n'est pas compatible avec cet objet.

Les classes qui implémentent l'interface Comparable ont leur ordre naturel spécifié avec elles et peuvent donc être triées directement dans Collection ou Arrays à l'aide de Collections.sort () et Arrays.sort (). En outre, ils peuvent être utilisés comme clé dans des cartes triées et des éléments dans des ensembles triés sans spécifier séparément Comparateur.

Comprenons l'interface comparable à l'aide d'un exemple:

Exemple:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Production:

Explication

Ceci est une application pour stocker les détails des étudiants.

  • Dans un premier temps, nous avons créé une classe «Etudiant» comme représentation de l'entité Etudiant. Nous allons stocker des détails de base comme le numéro de rôle, le nom et l'âge des étudiants.
  • Et l'exigence est de trier la liste des étudiants en fonction du numéro de rôle.
  • Pour répondre à cette exigence, une interface comparable est implémentée et comparée aux étudiants en fonction du nombre de rôles, comme vous pouvez voir la mise en œuvre de la méthode «compareTo».
  • Ensuite, nous avons la méthode principale pour afficher la fonctionnalité. Ici, nous avons créé un «TreeSet» et ajouté cinq élèves ayant des numéros de rôle aléatoires. Nous avons utilisé «TreeSet» car il stocke les éléments dans un ordre trié.
  • Maintenant, si vous parcourez la liste des étudiants, vous constaterez que les étudiants sont triés en fonction du numéro de rôle. Voilà notre exigence!
  • Nous pourrions également trier les élèves en fonction d'autres attributs comme le nom ou l'âge. Pour ce faire, nous devrons utiliser des variables de nom ou d'âge dans la méthode "compareTo" au lieu de "rollNo".

Exemple:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Comparable vs Comparateur

Comparateur est également une interface comme Comparable qui est utilisée pour comparer deux objets d'un même type. La différence est que Comparator n'est pas implémenté dans la classe d'entité elle-même. Nous devons l'implémenter dans une autre classe et en fournir explicitement l'instance au mécanisme de tri. Nous pouvons également utiliser une instance de classe anonyme à cet effet.

Par exemple, supposons que nous ayons une classe Student sans implémenter une interface comparable:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Si vous essayez d'exécuter ce programme, vous obtiendrez cette exception:

Parce que TreeSet a besoin d'un moyen de trier les éléments.

Pour résoudre cette erreur, nous pouvons utiliser le comparateur tel qu'implémenté dans ce programme:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Vous pouvez voir que l'interface du comparateur est implémentée dans une classe interne anonyme et qu'une instance est fournie à TreeSet pour trier les éléments. Vous obtiendrez maintenant une sortie correcte comme précédemment.

Interface de collecte en Java

La collection est l'interface racine dans le cadre des collections. Il contient la déclaration de toutes les méthodes à usage général qui sont implémentées dans des collections comme les listes et les ensembles. L'interface Map n'étend pas l'interface Collection car Map est une collection de paires clé-valeur et pas seulement une collection d'éléments. Certaines méthodes d'interface Collection sont implémentées dans une classe abstraite «AbstractCollection».

Cette interface n'est pas directement implémentée mais étendue par des interfaces spécifiques car l'implémentation de ces méthodes est spécifique à la collection. Par exemple, certaines collections autorisent les éléments en double (Ex-List) tandis que certains ne le font pas (Ex-Set), certains maintiennent l'indexation (Ex-List) tandis que d'autres ne le font pas (Ex-Set).

Certaines méthodes importantes sont décrites ici:

  1. Ajout booléen (E e): cette méthode ajoute un élément à cette collection et renvoie le statut de l'opération d'ajout.
  2. boolean addAll (Collection c): cette méthode ajoute tous les éléments de la collection spécifiée dans cette collection et renvoie le statut de l'opération d'ajout.
  3. void clear (): Cette méthode supprime tous les éléments de cette collection.
  4. boolean contains (Object o): Cette méthode vérifie si l'élément spécifié est présent dans la collection ou non. Renvoie vrai ou faux en conséquence.
  5. boolean contains (Collection c): Cette méthode vérifie si tous les éléments de la collection spécifiée sont présents dans cette collection ou non et renvoie true ou false en conséquence.
  6. boolean isEmpty (): cette méthode vérifie si la collection est vide ou non et renvoie true ou false en conséquence.
  7. Iterator iterator (): cette méthode renvoie l'itérateur pour cette collection. Iterator est utilisé pour parcourir tous les éléments de cette collection.
  8. boolean remove (Object o): cette méthode supprime l'élément spécifié de la collection et renvoie le statut de l'opération de suppression.
  9. boolean removeAll (Collection c): Cette méthode supprime tous les éléments de cette collection qui sont présents dans la collection spécifiée et cette collection.
  10. boolean retentionAll (Collection c): cette méthode supprime tous les éléments de cette collection qui ne sont pas présents dans la collection spécifiée et présents dans cette collection.
  11. int size (): cette méthode renvoie la taille de cette collection.
  12. Object () toArray (): Il s'agit d'une méthode importante qui forme et renvoie le tableau contenant tous les éléments de cette collection.
  13. T () toArray (T () a): Cette méthode ajoute tous les éléments de cette collection dans un tableau spécifié et renvoie le tableau. Si la taille du tableau est inférieure à la taille de cette collection, il crée un nouveau tableau de types identique au type de tableau spécifié et le renvoie. Si la taille du tableau spécifié est supérieure à la taille de cette collection, la valeur nulle est définie pour les éléments restants du tableau et renvoie le tableau.

Conclusion - Comparable dans l'exemple Java

Pour résumer, l'interface Comparable in Java est très utile pour comparer des objets manuellement, trier des collections et des tableaux ou pour avoir trié la collection elle-même. Nous pouvons également trier les éléments en fonction des différents attributs de l'entité. Il n'est pas obligatoire mais fortement recommandé d'avoir le même résultat à partir d'égaux et de la méthode «compareTo» pour éviter le désordre dans une collection qui utilise ces deux méthodes.

Articles recommandés

Ceci est un guide de Comparable dans l'exemple Java. Ici, nous discutons de l'Introduction Comparable en Java, de l'interface de collecte en Java, etc. Vous pouvez également consulter nos autres articles suggérés pour en savoir plus–

  1. Tri en Java
  2. Meilleur IDE Java
  3. Séquences en Python
  4. Fonctions de chaîne Oracle
  5. Guide complet de tri en C # avec des exemples
  6. Collections PL / SQL | Syntaxe, types, exceptions