Comparable এবং Comparator উভয়ই ইন্টারফেস যা কালেকশনের এলিমেন্ট সর্ট করতে ব্যবহৃত হয়। Comparator java.util প্যাকেজে, Comparable java.lang প্যাকেজে। Comparator দুটি অবজেক্ট দিয়ে সর্ট করে, Comparable "this" রেফারেন্স দিয়ে একটা অবজেক্টের সাথে তুলনা করে।
Comparable এবং Comparator-এর তুলনা
| ক্রমিক নং | বিষয় | Comparable | Comparator |
|---|---|---|---|
| ১ | মেথড | compareTo(Object o) মেথড | compare(Object o1, Object o2) মেথড |
| ২ | সর্টিং ব্যবহার | Collections.sort(List) - Comparable টাইপের অবজেক্টের জন্য | Collections.sort(List, Comparator) - Comparator টাইপের অবজেক্টের জন্য |
| ৩ | সর্টিং সিকোয়েন্স | সিঙ্গেল সর্টিং সিকোয়েন্স | মাল্টিপল সর্টিং সিকোয়েন্স সম্ভব |
| ৪ | প্যাকেজ | java.lang প্যাকেজ | java.util প্যাকেজ |
Comparable উদাহরণ
public class Laptop implements Comparable<Laptop> {
String name;
int ram;
int price;
public Laptop(String name, int ram, int price) {
this.name = name;
this.ram = ram;
this.price = price;
}
@Override
public int compareTo(Laptop o) {
return Integer.compare(this.ram, o.ram); // RAM অনুযায়ী সর্ট
}
// getter/setter...
}
public class ComparableExample {
public static void main(String[] args) {
List<Laptop> laptopList = new ArrayList<>();
laptopList.add(new Laptop("HCL", 16, 800));
laptopList.add(new Laptop("Apple", 8, 100));
laptopList.add(new Laptop("Dell", 4, 600));
Collections.sort(laptopList); // Comparable ব্যবহার করে
for (Laptop lap : laptopList) {
System.out.println(lap.getRam());
}
}
}
আউটপুট
4
8
16
Comparator উদাহরণ
import java.util.*;
public class ComparatorExample {
public static void main(String[] args) {
List<Laptop> laptopList = new ArrayList<>();
laptopList.add(new Laptop("HCL", 16, 800));
laptopList.add(new Laptop("Apple", 8, 100));
laptopList.add(new Laptop("Dell", 4, 600));
// ল্যাম্বডা এক্সপ্রেশন দিয়ে Comparator (নাম অনুযায়ী সর্ট)
Comparator<Laptop> byName = (o1, o2) -> o1.getName().compareTo(o2.getName());
Collections.sort(laptopList, byName);
for (Laptop lap : laptopList) {
System.out.println(lap.getName());
}
}
}
class Laptop {
String name;
int ram;
int price;
// constructor, getter/setter...
}
আউটপুট
Apple
Dell
HCL
মূল নোট
- Comparable: নेचারেল অর্ডারিং, ক্লাসের ভিতরে ইমপ্লিমেন্ট, একক সর্ট লজিক
- Comparator: কাস্টম অর্ডারিং, আলাদা ক্লাস/ল্যাম্বডা, একাধিক সর্ট লজিক সম্ভব
- জাভা ৮+ এ:
Comparator.comparing(Laptop::getRam)বা.thenComparing(Laptop::getPrice)ব্যবহার করা সহজ