logo

Різниця між Comparable і Comparator

Comparable і Comparator є інтерфейсами і можуть використовуватися для сортування елементів колекції.

Однак існує багато відмінностей між інтерфейсами Comparable і Comparator, які наведені нижче.

Порівняннийкомпаратор
1) Comparable забезпечує а одна послідовність сортування . Іншими словами, ми можемо сортувати колекцію на основі одного елемента, такого як ідентифікатор, назва та ціна.Компаратор надає декілька послідовностей сортування . Іншими словами, ми можемо сортувати колекцію на основі кількох елементів, таких як ідентифікатор, назва та ціна тощо.
2) Порівняний впливає на вихідний клас , тобто фактичний клас змінюється.компаратор не впливає на вихідний клас , тобто фактичний клас не змінюється.
3) Порівнянні забезпечує метод compareTo(). сортувати елементи.Компаратор забезпечує метод compare(). сортувати елементи.
4) Comparable присутній в 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, де ми сортуємо елементи списку за допомогою різних компараторів.

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

Цей клас забезпечує логіку порівняння на основі імені. У такому випадку ми використовуємо метод 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 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