কম্পিউটার টিউটোরিয়াল

জাভাতে Comparable এবং Comparator-এর পার্থক্য

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) ব্যবহার করা সহজ
  1. জাভাতে Serialization এবং Externalization-এর পার্থক্য

  2. জাভাতে Comparable এবং Comparator-এর পার্থক্য

  3. জাভাতে Iterator এবং Enumeration-এর পার্থক্য

  4. জাভাতে ArrayList এবং HashSet-এর পার্থক্য