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()
- Consistent Behavior:
- একই অবজেক্ট বারবার তুলনা করলে
equals()এবংhashCode()একি ফলাফল দিতে হবে।
- একই অবজেক্ট বারবার তুলনা করলে
- Symmetry:
- যদি
a.equals(b)সত্য হয়, তাহলেb.equals(a)ও সত্য হতে হবে।
- যদি
- Transitivity:
- যদি
a.equals(b)এবংb.equals(c)হয়, তাহলেa.equals(c)ও সত্য হতে হবে।
- যদি
- Non-nullity:
- যদি
anull না হয়, তাহলেa.equals(null)সবসময়falseহতে হবে।
- যদি
- hashCode() এর জন্য:
hashCode()একই অবজেক্টের জন্য সর্বদা একই মান দিতে হবে।- সমান অবজেক্টগুলোর (যেখানে
equals()সত্য)hashCode()সমান হতে হবে।
- Javatuples: ডিফল্টভাবে
equals()এবংhashCode()মেথড সরবরাহ করে, যা Tuple এর মান অনুযায়ী কাজ করে। - Custom Tuples: কাস্টম Tuples ব্যবহার করলে
equals()এবংhashCode()ইমপ্লিমেন্ট করা গুরুত্বপূর্ণ। - Hash-based Collections: Tuple-কে Key বা Value হিসেবে ব্যবহার করতে হলে সঠিক
equals()এবংhashCode()ইমপ্লিমেন্ট করতে হবে।
এটি নিশ্চিত করলে Tuple ব্যবহার আরও কার্যকর এবং নিরাপদ হয়।
Read more