Comparable Interface এর মাধ্যমে Natural Ordering গাইড ও নোট

Java Technologies - জাভা ইউটিল.প্যাকেজ (Java.util Package) - Comparable এবং Comparator Interface
267

Comparable ইন্টারফেসটি Java.util প্যাকেজের একটি গুরুত্বপূর্ণ অংশ, যা কোনো ক্লাসের natural ordering (প্রাকৃতিক ক্রম) নির্ধারণ করতে ব্যবহৃত হয়। যখন একটি ক্লাস Comparable ইন্টারফেসকে ইমপ্লিমেন্ট করে, তখন আপনি সেই ক্লাসের অবজেক্টগুলিকে সরাসরি sorting বা ordering করতে পারবেন। Natural ordering এমন একটি প্রক্রিয়া, যেখানে কোনো ক্লাসের অবজেক্টগুলি নিজের মধ্যে এক প্রাকৃতিক ক্রম অনুসারে সাজানো হয়। সাধারণত, compareTo() মেথডটি এই ক্রম নির্ধারণ করতে ব্যবহৃত হয়।

Comparable Interface এর উদ্দেশ্য এবং বৈশিষ্ট্য:

  1. Natural Ordering:
    • Comparable ইন্টারফেসের মূল উদ্দেশ্য হলো কোনো ক্লাসের অবজেক্টের জন্য একটি প্রাকৃতিক ক্রম (natural order) স্থাপন করা, যেমন ছোট থেকে বড় বা বড় থেকে ছোট।
  2. compareTo() Method:
    • compareTo() মেথডটি Comparable ইন্টারফেসের একটি একমাত্র মেথড, যা দুইটি অবজেক্টের মধ্যে তুলনা করে এবং সেগুলির মধ্যে যে ক্রম আছে তা ফেরত দেয়।
    • Return values:
      • 0: যদি দুটি অবজেক্ট সমান হয়।
      • Negative value: যদি প্রথম অবজেক্টটি দ্বিতীয় অবজেক্টের চেয়ে ছোট হয়।
      • Positive value: যদি প্রথম অবজেক্টটি দ্বিতীয় অবজেক্টের চেয়ে বড় হয়।

Comparable Interface এর Syntax:

public interface Comparable<T> {
    public int compareTo(T o);
}

এখানে T হচ্ছে যে টাইপের অবজেক্ট আপনি তুলনা করতে চান।


Comparable Interface এর মাধ্যমে Natural Ordering উদাহরণ:

1. Integer এর জন্য Natural Ordering

Integer ক্লাস ইতিমধ্যেই Comparable ইন্টারফেস ইমপ্লিমেন্ট করে এবং এতে প্রাকৃতিক ক্রম হিসেবে ছোট থেকে বড় (ascending order) সংখ্যা সাজানো হয়। নিচে Integer এর প্রাকৃতিক ক্রম ব্যবহার করার উদাহরণ দেখানো হয়েছে:

import java.util.ArrayList;
import java.util.Collections;

public class ComparableExample {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(3);
        numbers.add(7);
        numbers.add(5);

        // Sorting the list using natural ordering (ascending order)
        Collections.sort(numbers);

        System.out.println("Sorted List: " + numbers);
    }
}

Output:

Sorted List: [3, 5, 7, 10]

ব্যাখ্যা:

  • এখানে Integer ক্লাসের natural ordering (ascending order) ব্যবহার করা হয়েছে, যাতে সংখ্যাগুলো ছোট থেকে বড় অর্ডারে সাজানো হয়েছে।
  • Collections.sort() মেথডটি Comparable ইন্টারফেসের মাধ্যমে প্রাকৃতিক ক্রম অনুযায়ী তালিকাটি সাজিয়ে দেয়।

2. Custom Class এর জন্য Natural Ordering

ধরা যাক, আমাদের একটি Student ক্লাস আছে এবং আমরা চাই শিক্ষার্থীদের নামের ভিত্তিতে তাদের সাজাতে। এর জন্য, আমরা Student ক্লাসে Comparable ইন্টারফেস ইমপ্লিমেন্ট করব এবং compareTo() মেথডে নামের ভিত্তিতে ক্রম নির্ধারণ করব।

import java.util.ArrayList;
import java.util.Collections;

class Student implements Comparable<Student> {
    String name;
    int age;

    // Constructor
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Overriding compareTo() method to compare students by name
    @Override
    public int compareTo(Student other) {
        return this.name.compareTo(other.name);
    }

    @Override
    public String toString() {
        return name + " (" + age + " years old)";
    }
}

public class ComparableStudentExample {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("John", 22));
        students.add(new Student("Alice", 20));
        students.add(new Student("Bob", 21));

        // Sorting the list of students based on their names (natural ordering)
        Collections.sort(students);

        // Display the sorted list
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

Output:

Alice (20 years old)
Bob (21 years old)
John (22 years old)

ব্যাখ্যা:

  • Student ক্লাসে Comparable<Student> ইন্টারফেস ইমপ্লিমেন্ট করা হয়েছে এবং compareTo() মেথডের মাধ্যমে name ফিল্ডের ওপর ভিত্তি করে শিক্ষার্থীদের নামের অর্ডারে সাজানো হয়েছে।
  • Collections.sort() মেথডের মাধ্যমে শিক্ষার্থীদের নামের ভিত্তিতে প্রাকৃতিক ক্রমে (alphabetically) সাজানো হয়েছে।

Comparable Interface এর প্রয়োগের সুবিধা:

  1. Sorting:
    • যখন কোনো ক্লাস Comparable ইন্টারফেস ইমপ্লিমেন্ট করে, তখন সেই ক্লাসের অবজেক্টগুলি সহজে sorting করা যায়। Collections.sort() মেথডের মাধ্যমে তালিকা সাজানো যায়।
  2. Natural Ordering:
    • compareTo() মেথডের মাধ্যমে আপনি ক্লাসের অবজেক্টগুলির মধ্যে প্রাকৃতিক ক্রম স্থাপন করতে পারেন। এটি সাধারণত সংখ্যার ক্রম, অক্ষরের ক্রম (alphabetical order), বা অন্যান্য বৈশিষ্ট্য ভিত্তিক হতে পারে।
  3. Custom Sorting:
    • Comparable ব্যবহার করে আপনি সহজেই কাস্টম ক্রম নির্ধারণ করতে পারেন, যেমন শিক্ষার্থীদের নাম বা বয়সের ওপর ভিত্তি করে ক্রম নির্ধারণ করা।
  4. Comparator vs Comparable:
    • Comparable একক ক্রম নির্ধারণের জন্য ব্যবহৃত হয়, তবে Comparator আরও বেশি কাস্টমাইজযোগ্য এবং একাধিক ক্রম সংজ্ঞায়িত করতে ব্যবহৃত হয়। Comparable প্রাকৃতিক ক্রমের জন্য এবং Comparator কাস্টম ক্রমের জন্য ব্যবহৃত হয়।

Comparable Interface এবং Sorting

  • Comparable ইন্টারফেসের মাধ্যমে natural ordering নির্ধারণ করা যায়, যা সরাসরি Collections.sort() বা Arrays.sort()` মেথডের মাধ্যমে প্রয়োগ করা যায়।
  • যদি আপনি একাধিক প্রপার্টি (যেমন বয়স, নাম, বা গড় নম্বর) এর ওপর ভিত্তি করে সাজাতে চান, তবে Comparator ব্যবহার করতে হবে।

Example: Sorting by Multiple Fields Using Comparator

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Student {
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + " (" + age + " years old)";
    }
}

public class StudentSortingExample {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("John", 22));
        students.add(new Student("Alice", 20));
        students.add(new Student("Bob", 21));

        // Sorting by age, then by name
        Collections.sort(students, Comparator.comparingInt((Student s) -> s.age)
                .thenComparing(s -> s.name));

        // Display the sorted list
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

Output:

Alice (20 years old)
Bob (21 years old)
John (22 years old)

ব্যাখ্যা:

  • এখানে Comparator.comparingInt() এবং thenComparing() ব্যবহার করা হয়েছে যাতে প্রথমে age এবং পরে name এর ওপর ভিত্তি করে শিক্ষার্থীদের সাজানো যায়।

  • Comparable ইন্টারফেস Java Collections Framework এর একটি গুরুত্বপূর্ণ অংশ, যা natural ordering নির্ধারণ করার জন্য ব্যবহৃত হয়।
  • compareTo() মেথডের মাধ্যমে আপনি Comparable ইন্টারফেসের অবজেক্টগুলির মধ্যে ক্রম নির্ধারণ করতে পারেন, যা sorting এবং comparing সহজ করে তোলে।
  • Comparable ক্লাসের প্রয়োগে Collections.sort() এবং Arrays.sort() মেথডগুলি সহজে ব্যবহার করা যায়।
Content added By
Promotion

Are you sure to start over?

Loading...