logo

Diferença entre Comparável e Comparador

Comparable e Comparator são interfaces e podem ser usados ​​para classificar elementos de coleção.

No entanto, existem muitas diferenças entre as interfaces Comparável e Comparadora, fornecidas a seguir.

ComparávelComparador
1) Comparável fornece um sequência de classificação única . Em outras palavras, podemos classificar a coleção com base em um único elemento, como id, nome e preço.O Comparador fornece múltiplas sequências de classificação . Em outras palavras, podemos classificar a coleção com base em vários elementos, como id, nome e preço, etc.
2) Comparável afeta a classe original , ou seja, a classe real é modificada.Comparador não afeta a classe original , ou seja, a classe real não é modificada.
3) Ofertas comparáveis método compareTo() para classificar elementos.Comparador fornece método comparar() para classificar elementos.
4) Comparável está presente em java.lang pacote.Um Comparador está presente no java.util pacote.
5) Podemos classificar os elementos da lista do tipo Comparable por Coleções.sort(Lista) método.Podemos classificar os elementos da lista do tipo Comparator por Collections.sort(Lista, Comparador) método.

Exemplo comparável de Java

Vejamos o exemplo de uma interface Comparable que classifica os elementos da lista com base na idade.

Arquivo: 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); } } } 
Teste agora

Saída:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Exemplo de comparador Java

Vamos ver um exemplo da interface Java Comparator onde classificamos os elementos de uma lista usando diferentes comparadores.

Aluno.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

Esta classe fornece lógica de comparação com base no nome. Nesse caso, estamos usando o método compareTo() da classe String, que fornece internamente a lógica de comparação.

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

Nesta classe, estamos imprimindo os valores do objeto classificando com base no nome e na idade.

baixar youtube com vlc
 //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); } } } 

Saída:

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