Comparable ইন্টারফেস অবজেক্টের অর্ডারিংয়ের জন্য compareTo() মেথড প্রদান করে। এই অর্ডারিংকে ক্লাসের প্রাকৃতিক অর্ডারিং বলা হয় এবং compareTo() মেথডকে এর প্রাকৃতিক তুলনা মেথড বলা হয়। Comparator ইন্টারফেস সর্টিং অপারেশন করার জন্য মেথডগুলো প্রদান করে। Comparator ইন্টারফেস ব্যবহার করে আমরা একাধিক সর্টিং সিকোয়েন্স করতে পারি। আমরা একাধিক ডেটা মেম্বারের সাপেক্ষে অবজেক্ট সর্ট করতে পারি।
compareTo()
compareTo() মেথড এই অবজেক্টটি o1 অবজেক্টের সাথে তুলনা করে এবং একটি ইন্টিজার রিটার্ন করে।
সিনট্যাক্স
public int compareTo(Object o1)
- যদি এবং কেবল যদি এই অবজেক্ট o1-এর চেয়ে ছোট হয়, তবে এটি নেগেটিভ নাম্বার রিটার্ন করে।
- যদি এবং কেবল যদি এই অবজেক্ট o1-এর চেয়ে বড় হয়, তবে এটি পজিটিভ নাম্বার রিটার্ন করে।
- যদি এবং কেবল যদি এই অবজেক্ট o1-এর সমান হয়, তবে এটি 0 রিটার্ন করে।
উদাহরণ
import java.util.*;
class Employee implements Comparable {
String name;
int age;
Employee(String name, int age) {
this.name = name;
this.age = age;
}
// overridden compareTo method
@Override
public int compareTo(Object o) {
return this.age - ((Employee) o).age;
}
}
public class ComparableDemo {
public static void main(String[] args) {
// CREATION
List list = new ArrayList<>();
// INSERTION
list.add(new Employee("Krishna", 30));
list.add(new Employee("Archana", 28));
list.add(new Employee("Vineet", 25));
list.add(new Employee("Ramesh", 38));
list.add(new Employee("Alok", 28));
System.out.println("Before sorting: ");
for (Employee e : list) {
System.out.print("[ EMP : age = " + e.age + " ] ");
}
// SORTING
Collections.sort(list);
System.out.println("After sorting: ");
for (Employee e : list) {
System.out.print("[ EMP : age = " + e.age + " ] ");
}
}
}
আউটপুট
Before sorting: [ EMP : age = 2 ] [ EMP : age = 33 ] [ EMP : age = 11 ] [ EMP : age = 34 ] [ EMP : age = 7 ] After sorting: [ EMP : age = 2 ] [ EMP : age = 7 ] [ EMP : age = 11 ] [ EMP : age = 33 ] [ EMP : age = 34 ]
compare()
compare() মেথড প্রথম অবজেক্টটি দ্বিতীয় অবজেক্টের সাথে তুলনা করে এবং একটি ইন্টিজার রিটার্ন করে।
সিনট্যাক্স
public int compare (Object o1,Object o2)
- যদি এবং কেবল যদি o1, o2-এর চেয়ে ছোট হয়, তবে এটি নেগেটিভ নাম্বার রিটার্ন করে।
- যদি এবং কেবল যদি o1, o2-এর চেয়ে বড় হয়, তবে এটি পজিটিভ নাম্বার রিটার্ন করে।
- যদি এবং কেবল যদি o1, o2-এর সমান হয়, তবে এটি 0 রিটার্ন করে।
উদাহরণ
import java.util.*;
class Student {
String name;
int age, roll;
Student(String name, int age, int roll) {
this.name = name;
this.age = age;
this.roll = roll;
}
}
class AgeComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return ((Student) o1).age - ((Student) o2).age;
}
}
class RollComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
return ((Student) o1).roll - ((Student) o2).roll;
}
}
public class ComparatorDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Student("Ramesh", 30, 20));
list.add(new Student("Adithya", 7, 10));
list.add(new Student("Krishna", 25, 5));
list.add(new Student("Vineet", 24, 15));
System.out.println("BEFORE SORTING");
for (Student e : list) {
System.out.println("[ STU : name = " + e.name + " age = " + e.age + " roll = " + e.roll + "]");
}
Collections.sort(list,new AgeComparator());
System.out.println("AFTER SORTING WITH AGE");
for (Student e : list) {
System.out.println("[ STU : name = " + e.name + " age = " + e.age + " ]");
}
Collections.sort(list,new RollComparator());
System.out.println("AFTER SORTING WITH ROLL");
for (Student e : list) {
System.out.println("[ STU : name = " + e.name + " roll = " + e.roll + " ]");
}
}
}
আউটপুট
BEFORE SORTING [ STU : name = Ramesh age = 30 roll = 20 ] [ STU : name = Adithya age = 7 roll = 10 ] [ STU : name = Krishna age = 25 roll = 5 ] [ STU : name = Vineet age = 24 roll = 15 ] AFTER SORTING WITH AGE [ STU : name = Adithya age = 7 ] [ STU : name = Vineet age = 24 ] [ STU : name = Krishna age = 25 ] [ STU : name = Ramesh age = 30 ] AFTER SORTING WITH ROLL [ STU : name = Krishna roll = 5 ] [ STU : name = Adithya roll = 10 ] [ STU : name = Vineet roll = 15 ] [ STU : name = Ramesh roll = 20 ]