logo

Разлика между Comparable и Comparator

Comparable и Comparator са интерфейси и могат да се използват за сортиране на елементи на колекция.

Въпреки това има много разлики между интерфейсите на Comparable и Comparator, които са дадени по-долу.

СравнимиКомпаратор
1) Comparable предоставя a единична последователност за сортиране . С други думи, можем да сортираме колекцията въз основа на един елемент като id, име и цена.Компараторът предоставя множество последователности за сортиране . С други думи, можем да сортираме колекцията въз основа на множество елементи като id, име и цена и т.н.
2) Сравними засяга оригиналния клас , т.е. действителният клас е модифициран.Компаратор не засяга оригиналния клас , т.е. действителният клас не се променя.
3) Сравними предоставя метод compareTo(). за сортиране на елементи.Comparator предоставя compare() метод за сортиране на елементи.
4) Съпоставимо присъства в java.lang пакет.Компаратор присъства в java.util пакет.
5) Можем да сортираме елементите на списъка от тип Comparable по Collections.sort(списък) метод.Можем да сортираме елементите на списъка от тип Comparator по Collections.sort(списък, сравнение) метод.

Сравним с Java пример

Нека да видим примера на Comparable интерфейс, който сортира елементите на списъка въз основа на възраст.

как да получите текуща дата в java

Файл: 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); } } } 
Тествайте сега

Изход:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Пример за сравнение на Java

Нека да видим пример за интерфейса на Java Comparator, където сортираме елементите на списък с помощта на различни компаратори.

Студент.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

Този клас предоставя логика за сравнение въз основа на името. В такъв случай ние използваме метода compareTo() на клас String, който вътрешно осигурява логиката за сравнение.

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

В този клас отпечатваме стойностите на обекта чрез сортиране въз основа на име и възраст.

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); } } } 

Изход:

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