Tuple এর জন্য equals() এবং hashCode() মেথড কনফিগার করা

Tuples এর Equality এবং Hashing - জাভা টাপল (Java Tuples) - Java Technologies

323

Tuple ব্যবহার করার সময়, equals() এবং hashCode() মেথডগুলো খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন Tuples ব্যবহার করে ডেটা তুলনা করা বা Tuples-কে Hash-based Collections (যেমন HashMap, HashSet) এর মধ্যে সংরক্ষণ করা হয়।


Javatuples এর Built-in Support

Javatuples লাইব্রেরি ডিফল্টভাবে equals() এবং hashCode() মেথড ইমপ্লিমেন্ট করে। ফলে Tuples এর ভ্যালু অনুযায়ী এগুলো কাজ করে। তবে, কাস্টম Tuple তৈরি করলে নিজস্ব equals() এবং hashCode() মেথড কনফিগার করতে হয়।


১. Javatuples এর equals() এবং hashCode()

Example:

import org.javatuples.Pair;

public class TupleEqualsHashCodeExample {
    public static void main(String[] args) {
        Pair<String, Integer> tuple1 = Pair.with("Alice", 25);
        Pair<String, Integer> tuple2 = Pair.with("Alice", 25);
        Pair<String, Integer> tuple3 = Pair.with("Bob", 30);

        // equals() ব্যবহার করে তুলনা
        System.out.println(tuple1.equals(tuple2)); // true
        System.out.println(tuple1.equals(tuple3)); // false

        // hashCode() ব্যবহার
        System.out.println("HashCode of tuple1: " + tuple1.hashCode());
        System.out.println("HashCode of tuple2: " + tuple2.hashCode());
        System.out.println("HashCode of tuple3: " + tuple3.hashCode());
    }
}

আউটপুট:

true
false
HashCode of tuple1: 123456
HashCode of tuple2: 123456
HashCode of tuple3: 654321

২. কাস্টম Tuple এর জন্য equals() এবং hashCode() মেথড তৈরি করা

যদি আপনি কাস্টম Tuple তৈরি করেন, তাহলে আপনাকে নিজে equals() এবং hashCode() মেথড ইমপ্লিমেন্ট করতে হবে।

Custom Tuple Example:

import java.util.Objects;

public class CustomTuple<A, B> {
    private A first;
    private B second;

    public CustomTuple(A first, B second) {
        this.first = first;
        this.second = second;
    }

    public A getFirst() {
        return first;
    }

    public B getSecond() {
        return second;
    }

    // equals() মেথড ইমপ্লিমেন্ট করা
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;

        CustomTuple<?, ?> that = (CustomTuple<?, ?>) obj;

        return Objects.equals(first, that.first) && Objects.equals(second, that.second);
    }

    // hashCode() মেথড ইমপ্লিমেন্ট করা
    @Override
    public int hashCode() {
        return Objects.hash(first, second);
    }

    @Override
    public String toString() {
        return "CustomTuple{" +
                "first=" + first +
                ", second=" + second +
                '}';
    }
}

Usage Example:

public class CustomTupleExample {
    public static void main(String[] args) {
        CustomTuple<String, Integer> tuple1 = new CustomTuple<>("Alice", 25);
        CustomTuple<String, Integer> tuple2 = new CustomTuple<>("Alice", 25);
        CustomTuple<String, Integer> tuple3 = new CustomTuple<>("Bob", 30);

        // equals() ব্যবহার করে তুলনা
        System.out.println(tuple1.equals(tuple2)); // true
        System.out.println(tuple1.equals(tuple3)); // false

        // hashCode() ব্যবহার
        System.out.println("HashCode of tuple1: " + tuple1.hashCode());
        System.out.println("HashCode of tuple2: " + tuple2.hashCode());
        System.out.println("HashCode of tuple3: " + tuple3.hashCode());
    }
}

আউটপুট:

true
false
HashCode of tuple1: 123456
HashCode of tuple2: 123456
HashCode of tuple3: 654321

৩. Hash-based Collections এ Tuple ব্যবহার

Example: HashMap-এ Tuple Key হিসেবে ব্যবহার

import org.javatuples.Pair;

import java.util.HashMap;

public class TupleInHashMap {
    public static void main(String[] args) {
        HashMap<Pair<String, Integer>, String> map = new HashMap<>();

        // Pair ব্যবহার করে Key তৈরি
        Pair<String, Integer> tuple1 = Pair.with("Alice", 25);
        Pair<String, Integer> tuple2 = Pair.with("Bob", 30);

        // ডেটা Map এ যোগ করা
        map.put(tuple1, "Engineer");
        map.put(tuple2, "Manager");

        // মান অ্যাক্সেস করা
        System.out.println("Alice's Job: " + map.get(tuple1)); // Engineer
        System.out.println("Bob's Job: " + map.get(tuple2)); // Manager
    }
}

৪. equals() এবং hashCode() এর কার্যপ্রণালী

ফিচারequals()hashCode()
ব্যবহারদুই অবজেক্ট সমান কিনা তা যাচাই করে।একটি সংখ্যা রিটার্ন করে যা হ্যাশ টেবিলের জন্য ব্যবহৃত হয়।
বৈশিষ্ট্যমান অনুযায়ী তুলনা।সমান অবজেক্টের জন্য একই হ্যাশকোড।
গুরুত্বHashMap, HashSet এর জন্য অপরিহার্য।হ্যাশ ভিত্তিক ডেটা স্ট্রাকচারের জন্য প্রয়োজন।

৫. Best Practices for equals() এবং hashCode()

  1. Consistent Behavior:
    • একই অবজেক্ট বারবার তুলনা করলে equals() এবং hashCode() একি ফলাফল দিতে হবে।
  2. Symmetry:
    • যদি a.equals(b) সত্য হয়, তাহলে b.equals(a) ও সত্য হতে হবে।
  3. Transitivity:
    • যদি a.equals(b) এবং b.equals(c) হয়, তাহলে a.equals(c) ও সত্য হতে হবে।
  4. Non-nullity:
    • যদি a null না হয়, তাহলে a.equals(null) সবসময় false হতে হবে।
  5. hashCode() এর জন্য:
    • hashCode() একই অবজেক্টের জন্য সর্বদা একই মান দিতে হবে।
    • সমান অবজেক্টগুলোর (যেখানে equals() সত্য) hashCode() সমান হতে হবে।

  • Javatuples: ডিফল্টভাবে equals() এবং hashCode() মেথড সরবরাহ করে, যা Tuple এর মান অনুযায়ী কাজ করে।
  • Custom Tuples: কাস্টম Tuples ব্যবহার করলে equals() এবং hashCode() ইমপ্লিমেন্ট করা গুরুত্বপূর্ণ।
  • Hash-based Collections: Tuple-কে Key বা Value হিসেবে ব্যবহার করতে হলে সঠিক equals() এবং hashCode() ইমপ্লিমেন্ট করতে হবে।

এটি নিশ্চিত করলে Tuple ব্যবহার আরও কার্যকর এবং নিরাপদ হয়।

Content added By
Promotion

Are you sure to start over?

Loading...