BidiMap (Bidirectional Map) হল একটি বিশেষ ধরনের Map যা দুইটি দিক থেকে কাজ করতে সক্ষম। অর্থাৎ, এটি একটি key-value সম্পর্কের পাশাপাশি value-key সম্পর্কও ধারণ করে। সাধারণত, Map-এ কেবল key -> value সম্পর্ক থাকে, কিন্তু BidiMap-এ আপনি value -> key সম্পর্কও অ্যাক্সেস করতে পারেন। এটি Apache Commons Collections লাইব্রেরির একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা Map-এর ডেটা স্ট্রাকচারের কার্যকারিতা বাড়ায়।
BidiMap এর বৈশিষ্ট্য
- Bidirectional Lookup:
- BidiMap আপনাকে একটি key থেকে value এবং value থেকে key উভয় দিকেই অনুসন্ধান করার সুযোগ দেয়।
- এটি সাধারণ Map এর তুলনায় আরও বেশি কার্যকরী, কারণ আপনি একে অপরের বিপরীতে ডেটার অ্যাক্সেস করতে পারেন।
- Dual Relationship:
- একটি BidiMap-এ কেবল একটি key-value সম্পর্ক থাকে না, বরং একই মান (value) এবং কী (key)-এর মধ্যে উল্টো সম্পর্কও তৈরি হয়।
- Unique Values:
- BidiMap সাধারণত unique values ধারণ করে, অর্থাৎ একটি মানের জন্য একমাত্র একটি কী থাকতে পারে। যদিও এটি সাধারণ Map এর মতো অনেক কীগুলোর জন্য একাধিক মান ধারণ করতে পারে, তবে উল্টো দিকেও একাধিক মান থাকতে পারে না।
- Bidirectional Access:
- এটি আপনাকে একটি উপাদান অ্যাক্সেস করার জন্য উভয় দিকের এক্সেস সরবরাহ করে। একদিকে আপনি key ব্যবহার করে value বের করতে পারেন এবং অন্যদিকে আপনি value ব্যবহার করে key বের করতে পারেন।
BidiMap এর বিভিন্ন বাস্তবায়ন
Apache Commons Collections লাইব্রেরিতে দুটি প্রধান BidiMap বাস্তবায়ন রয়েছে:
DualHashBidiMap: এটি একটি বাস্তবায়ন যা HashMap এবং HashSet এর মতো উপাদান ব্যবহার করে।TreeBidiMap: এটি একটি বাস্তবায়ন যা TreeMap এর ভিত্তিতে কাজ করে এবং BidiMap এর সমস্ত বৈশিষ্ট্য প্রদান করে, তবে এতে sorted order থাকে।
BidiMap এর উদাহরণ
এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে BidiMap এর কাজ দেখানো হয়েছে:
Example: BidiMap in Apache Commons Collections
import org.apache.commons.collections4.map.BidiMap;
import org.apache.commons.collections4.map.DualHashBidiMap;
public class BidiMapExample {
public static void main(String[] args) {
// Create a BidiMap instance
BidiMap<String, String> bidiMap = new DualHashBidiMap<>();
// Add key-value pairs
bidiMap.put("apple", "fruit");
bidiMap.put("carrot", "vegetable");
bidiMap.put("banana", "fruit");
// Access value using key
System.out.println("apple is a " + bidiMap.get("apple")); // Output: apple is a fruit
// Access key using value
System.out.println("The key for value 'fruit' is " + bidiMap.getKey("fruit")); // Output: The key for value 'fruit' is apple
// Check if a specific value exists
System.out.println("Does 'carrot' exist as a key? " + bidiMap.containsKey("carrot")); // Output: true
System.out.println("Does 'vegetable' exist as a value? " + bidiMap.containsValue("vegetable")); // Output: true
}
}
Output:
apple is a fruit
The key for value 'fruit' is apple
Does 'carrot' exist as a key? true
Does 'vegetable' exist as a value? true
ব্যাখ্যা:
- এখানে,
DualHashBidiMapব্যবহার করে একটি BidiMap তৈরি করা হয়েছে। put()মেথডের মাধ্যমে key-value পেয়ার যোগ করা হয়েছে।get()মেথডটি key থেকে value রিটার্ন করছে।getKey()মেথডটি value থেকে key রিটার্ন করছে।containsKey()এবংcontainsValue()মেথডগুলি অনুসন্ধানের জন্য ব্যবহৃত হয়েছে, যা নির্ধারণ করে যে কোনও কী বা মান ম্যাপে আছে কিনা।
BidiMap এর ব্যবহার এবং সুবিধা
- Bidirectional Lookup:
- সাধারণ Map যেখানে আপনি কেবল key থেকে value পেতে পারেন, BidiMap আপনাকে উল্টোভাবে value থেকে key পেতে সক্ষম করে, যা বিশেষভাবে দরকারী হতে পারে যখন আপনি উল্টো দিকে অনুসন্ধান করতে চান।
- Efficient Key-Value Relationship:
- BidiMap ডেটা স্ট্রাকচারটি key-value সম্পর্কের পাশাপাশি value-key সম্পর্ক বজায় রাখতে সাহায্য করে। এটি ডেটার প্রক্রিয়াকরণ এবং মান অনুযায়ী অনুসন্ধানকে আরো দ্রুত করে তোলে।
- Use Cases:
- Mapping Identifiers: যখন একটি unique identifier (key) এবং সেই identifier এর সাথে সংশ্লিষ্ট value দুটি আলাদা আলাদা ভাবে প্রয়োজন হয়।
- Reverse Lookup: কোনো বিশেষ value এর জন্য সেই value এর associated key রিটার্ন করতে হবে, তখন BidiMap একটি চমৎকার সমাধান হতে পারে।
- Efficiency:
- BidiMap যে ধরনের hashing বা sorting ব্যবহার করে তা আপনাকে উভয় দিক থেকে দ্রুত এক্সেস প্রদান করে, যা অন্যান্য Map এর তুলনায় কার্যকরী হতে পারে।
BidiMap এর সীমাবদ্ধতা
- Memory Usage:
- BidiMap দুটো দিক থেকে মান ধারণ করে, তাই এটি Map এর তুলনায় বেশি মেমরি ব্যবহার করতে পারে, কারণ একই ডেটা একাধিকভাবে সংরক্ষিত থাকে।
- Unidirectional Key-Value Assumption**:
- কিছু ক্ষেত্রে আপনি শুধুমাত্র একটি দিকের সম্পর্ক প্রয়োজন হতে পারেন, যেখানে BidiMap এর ব্যবহার অতিরিক্ত হয়ে পড়তে পারে।
- Unique Values:
- BidiMap এর মধ্যে একটি মান (value) শুধুমাত্র একাধিক কী (key) এর সাথে সম্পর্কিত হতে পারে না। এটি এমনকি unique values থাকতে বাধ্য করে।
BidiMap হল Map ডেটা স্ট্রাকচারের একটি শক্তিশালী উন্নত সংস্করণ যা আপনাকে key-value সম্পর্কের পাশাপাশি value-key সম্পর্কও এক্সেস করার সুযোগ দেয়। এটি দুই দিক থেকে ডেটা অনুসন্ধান করার জন্য কার্যকরী এবং বিভিন্ন key-value রিলেশনশিপ ম্যানেজ করার জন্য উপযুক্ত। DualHashBidiMap এবং TreeBidiMap এর মতো বাস্তবায়নগুলি BidiMap এর সুবিধা প্রদান করে, যেখানে আপনি দ্রুত এবং কার্যকরীভাবে bidirectional lookup করতে পারেন।
Read more