logo

Differenza tra comparabile e comparatore

Comparable e Comparator sono entrambi interfacce e possono essere utilizzati per ordinare gli elementi della raccolta.

Tuttavia, esistono molte differenze tra le interfacce Comparable e Comparator riportate di seguito.

ParagonabileComparatore
1) Paragonabile fornisce a singola sequenza di ordinamento . In altre parole possiamo ordinare la collezione in base ad un unico elemento come id, nome e prezzo.Il comparatore fornisce sequenze di ordinamento multiple . In altre parole possiamo ordinare la collezione sulla base di più elementi come id, nome, prezzo ecc.
2) Paragonabile influisce sulla classe originale , ovvero la classe effettiva viene modificata.Comparatore non influisce sulla classe originale , ovvero la classe effettiva non viene modificata.
3) Fornisce comparabili metodo compareTo() per ordinare gli elementi.Il comparatore fornisce metodo confrontare() per ordinare gli elementi.
4) Il comparabile è presente in java.lang pacchetto.Un comparatore è presente nel file java.util pacchetto.
5) Possiamo ordinare gli elementi dell'elenco di tipo Comparabile per Collezioni.sort(Elenco) metodo.Possiamo ordinare gli elementi dell'elenco di tipo Comparatore per Collections.sort(Elenco, Comparatore) metodo.

Esempio comparabile Java

Vediamo l'esempio di un'interfaccia Comparable che ordina gli elementi della lista in base all'età.

conversione da stringa a numero intero

File: TestSort3.java

 //Java Program to demonstrate the use of Java Comparable. //Creating a class which implements Comparable Interface import java.util.*; import java.io.*; class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } } //Creating a test class to sort the elements public class TestSort3{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 
Provalo adesso

Produzione:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Esempio di comparatore Java

Vediamo un esempio dell'interfaccia Java Comparator in cui stiamo ordinando gli elementi di una lista utilizzando diversi comparatori.

Student.java
 class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } 
AgeComparator.java
 import java.util.*; class AgeComparator implements Comparator{ public int compare(Student s1,Student s2){ if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
NomeComparator.java

Questa classe fornisce la logica di confronto basata sul nome. In tal caso, stiamo utilizzando il metodo compareTo() della classe String, che fornisce internamente la logica di confronto.

 import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } 
TestComparator.java

In questa classe stampiamo i valori dell'oggetto ordinandoli in base al nome e all'età.

pausa Java
 //Java Program to demonstrate the use of Java Comparator import java.util.*; import java.io.*; class TestComparator{ public static void main(String args[]){ //Creating a list of students ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); System.out.println('Sorting by Name'); //Using NameComparator to sort the elements Collections.sort(al,new NameComparator()); //Traversing the elements of list for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('sorting by Age'); //Using AgeComparator to sort the elements Collections.sort(al,new AgeComparator()); //Travering the list again for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 

Produzione:

 Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27