logo

Diferencia entre comparable y comparador

Tanto Comparable como Comparator son interfaces y pueden usarse para ordenar elementos de la colección.

Sin embargo, existen muchas diferencias entre las interfaces Comparable y Comparator que se detallan a continuación.

ComparableComparador
1) Comparable proporciona una secuencia de clasificación única . En otras palabras, podemos ordenar la colección según un solo elemento, como identificación, nombre y precio.El comparador proporciona múltiples secuencias de clasificación . En otras palabras, podemos ordenar la colección según múltiples elementos como identificación, nombre y precio, etc.
2) comparables afecta la clase original , es decir, se modifica la clase real.Comparador no afecta la clase original , es decir, la clase real no se modifica.
3) Ofertas comparables método comparar con () para ordenar elementos.El comparador proporciona método comparar() para ordenar elementos.
4) Comparable está presente en java.lang paquete.Un comparador está presente en el java.util paquete.
5) Podemos ordenar los elementos de la lista de tipo Comparable por Colecciones.sort(Lista) método.Podemos ordenar los elementos de la lista de tipo Comparador por Colecciones.sort(Lista, Comparador) método.

Ejemplo comparable de Java

Veamos el ejemplo de una interfaz Comparable que ordena los elementos de la lista según la edad.

Archivo: 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); } } } 
Pruébalo ahora

Producción:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Ejemplo de comparador de Java

Veamos un ejemplo de la interfaz Java Comparator donde estamos ordenando los elementos de una lista usando diferentes comparadores.

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; } } 
NameComparator.java

Esta clase proporciona lógica de comparación basada en el nombre. En tal caso, estamos utilizando el método compareTo() de la clase String, que proporciona internamente la lógica de comparación.

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

En esta clase, imprimimos los valores del objeto clasificándolos según el nombre y la edad.

red de arquitectura
 //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); } } } 

Producción:

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