Java.util প্যাকেজে HashSet, LinkedHashSet, এবং TreeSet তিনটি Set ইন্টারফেসের বাস্তবায়ন (implementations) হিসেবে কাজ করে। এগুলি সবই Collection Framework এর অংশ এবং ডুপ্লিকেট আইটেম না রাখার জন্য ব্যবহৃত হয়। তবে, এই তিনটি Set এর মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা তাদের কর্মপদ্ধতি, পারফরম্যান্স এবং ব্যবহারিক ক্ষেত্রে প্রভাব ফেলে।
1. HashSet
HashSet হল Set ইন্টারফেসের একটি বাস্তবায়ন যা Hashing ব্যবহার করে উপাদানগুলোকে সংরক্ষণ করে। এটি কোনও নির্দিষ্ট অর্ডারে উপাদানগুলো সংরক্ষণ করে না এবং এটি ডুপ্লিকেট উপাদান গ্রহণ করে না। HashSet দ্রুত O(1) গতি সহ আইটেম অনুসন্ধান, যোগ করা এবং মুছে ফেলার জন্য সক্ষম, তবে এটি উপাদানগুলিকে কোনো নির্দিষ্ট অর্ডারে রাখে না।
ব্যবহার:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Adding duplicate element
fruits.add("Apple");
// Printing the set
System.out.println("HashSet: " + fruits);
}
}
Output:
HashSet: [Banana, Apple, Orange]
ব্যাখ্যা:
HashSetএকটি unordered set যা duplicate values রাখে না। আপনি দেখতে পাবেন যে"Apple"দুটি বার যোগ করার পরও সেটে শুধুমাত্র একটি"Apple"থাকবে।
বিশেষত্ব:
- Order:
HashSetউপাদানগুলোকে unordered ভাবে সংরক্ষণ করে। - Performance:
O(1)গতি সহ অনুসন্ধান, যোগ করা, মুছে ফেলা।
2. LinkedHashSet
LinkedHashSet হল HashSet এর একটি উন্নত সংস্করণ, যা insertion order (এটি যেখানে যোগ করা হয়েছিল সেই অর্ডারে) অনুসরণ করে। এটি LinkedHashMap ব্যবহার করে যার ফলে এতে order থাকে। যেমন HashSet, এটি ডুপ্লিকেট আইটেম গ্রহণ করে না, তবে এটি উপাদানগুলির অর্ডার বজায় রাখে।
ব্যবহার:
import java.util.LinkedHashSet;
public class LinkedHashSetExample {
public static void main(String[] args) {
LinkedHashSet<String> fruits = new LinkedHashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Adding duplicate element
fruits.add("Apple");
// Printing the set
System.out.println("LinkedHashSet: " + fruits);
}
}
Output:
LinkedHashSet: [Apple, Banana, Orange]
ব্যাখ্যা:
LinkedHashSetউপাদানগুলোকে insertion order অনুসারে রাখে। এটিHashSetএর মতো কাজ করে তবে এতে insertion order বজায় রাখে।
বিশেষত্ব:
- Order:
LinkedHashSetউপাদানগুলোকে insertion order অনুসারে রাখে। - Performance:
O(1)গতি সহ অনুসন্ধান, যোগ করা, মুছে ফেলা (যেহেতু এটি Hashing ব্যবহার করে), তবে insertion order বজায় রাখতে একটু অতিরিক্ত সময় নেয়।
3. TreeSet
TreeSet হল SortedSet ইন্টারফেসের একটি বাস্তবায়ন, যা উপাদানগুলিকে sorted অবস্থায় রাখে। এটি TreeMap এর ভিত্তিতে কাজ করে এবং উপাদানগুলোকে natural ordering বা একটি নির্দিষ্ট Comparator অনুযায়ী সাজায়। TreeSet ডুপ্লিকেট উপাদান গ্রহণ করে না এবং এটি O(log n) সময়ে সব ধরনের অপারেশন সম্পাদন করে।
ব্যবহার:
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> fruits = new TreeSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Adding duplicate element
fruits.add("Apple");
// Printing the set
System.out.println("TreeSet: " + fruits);
}
}
Output:
TreeSet: [Apple, Banana, Orange]
ব্যাখ্যা:
TreeSetউপাদানগুলোকে sorted (যেমন alphabetical order বা numerical order) রাখে। এটিComparatorব্যবহার করে কাস্টম সাজানোরও সুযোগ দেয়।
বিশেষত্ব:
- Order:
TreeSetউপাদানগুলোকে sorted অবস্থায় রাখে, এবং natural ordering বাComparatorঅনুযায়ী সাজাতে পারে। - Performance:
O(log n)সময়ে সমস্ত অপারেশন সম্পাদিত হয়, কারণ এটি binary tree ভিত্তিক।
HashSet, LinkedHashSet, এবং TreeSet এর পার্থক্য
| Feature | HashSet | LinkedHashSet | TreeSet |
|---|---|---|---|
| Ordering | No ordering, unordered | Insertion order maintained | Sorted order (natural or custom) |
| Duplicates | Does not allow duplicates | Does not allow duplicates | Does not allow duplicates |
| Performance | O(1) for add, remove, and contains | O(1) for add, remove, and contains | O(log n) for add, remove, and contains |
| Implementation | Hash table based | Hash table + Linked list | Red-Black tree based |
| Null Elements | Allows null values | Allows null values | Allows null values (if natural ordering allows) |
| Use Case | When ordering is not required | When insertion order matters | When sorted order is required |
When to Use Which Set?
- HashSet:
- ব্যবহার করুন যখন অর্ডার গুরুত্বপূর্ণ নয় এবং ডুপ্লিকেট উপাদান না রাখার প্রয়োজন আছে।
- যেমন: বড় ডেটাসেটে দ্রুত অনুসন্ধান এবং যোগ করা।
- LinkedHashSet:
- ব্যবহার করুন যখন ইনসার্শন অর্ডার বজায় রাখতে হবে।
- যেমন: ডেটা সংরক্ষণ করতে চান যাতে যেভাবে যুক্ত করা হয়েছিল, সেভাবে বের করা হয় (তবে ডুপ্লিকেট থাকবে না)।
- TreeSet:
- ব্যবহার করুন যখন উপাদানগুলোকে সাজানো রাখতে হবে (প্রাকৃতিকভাবে বা কাস্টম অর্ডারে)।
- যেমন: একটি ডেটা সেটের উপাদানগুলো সাজানো অবস্থায় থাকতে হবে, যেমন একটি sorted list।
HashSet,LinkedHashSet, এবংTreeSetহল Set ইন্টারফেসের তিনটি জনপ্রিয় বাস্তবায়ন, যা duplicates বন্ধ করার জন্য ব্যবহৃত হয়।HashSetদ্রুত গতি প্রদান করে, কিন্তু উপাদানগুলো কোনো নির্দিষ্ট অর্ডারে রাখে না।LinkedHashSetইনসার্শন অর্ডার বজায় রাখে, তবে একটু অতিরিক্ত মেমরি ব্যবহার করে।TreeSetউপাদানগুলোকে সাজানো অবস্থায় রাখে, কিন্তু এর পারফরম্যান্স O(log n) সময় নেয়।
এই তিনটি Set ইন্টারফেসের বাস্তবায়ন তাদের নির্দিষ্ট ব্যবহার ক্ষেত্রে উপযুক্ত এবং আপনার প্রয়োজন অনুযায়ী নির্বাচন করা উচিত।
Read more