Java.util Package এর Set Interface একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা unique elements ধারণ করার জন্য ডিজাইন করা হয়েছে। Set হল একটি Collection ইন্টারফেসের একটি বিশেষায়িত ফর্ম, যেখানে শুধুমাত্র একক মান (unique values) থাকতে পারে এবং ডুপ্লিকেট উপাদান থাকতে পারে না।
Set Interface এর ধারণা
Set একটি unordered collection (অর্ডার নেই) যা unique elements রাখে। Java তে Set Interface java.util.Collection ইন্টারফেস থেকে বর্ধিত (extend) হয়েছে এবং এটি List এবং Queue এর মতো অন্যান্য সংগ্রহের ক্লাসের থেকে আলাদা, কারণ এতে ডুপ্লিকেট উপাদান থাকতে পারে না। এর মানে হলো Set এ একাধিক একে অপরের সমান উপাদান রাখা সম্ভব নয়।
Set Interface এর বৈশিষ্ট্য:
- Unique Elements: Set ডুপ্লিকেট মান অনুমোদন করে না। যখন আপনি একটি নতুন উপাদান যোগ করেন, এটি প্রথমে চেক করবে যে উপাদানটি ইতোমধ্যে সেটে রয়েছে কি না। যদি থাকে, তবে এটি নতুন উপাদানটি যুক্ত করবে না।
- Unordered: Set সাধারণত অর্ডার বজায় রাখে না, তাই আপনি যেভাবে উপাদানগুলো যুক্ত করবেন, সেগুলি ঠিক সেই অর্ডারে ফিরে পাবেন না (যেমন
HashSetএ)। - No Indexing: Set এ কোনও indexing (যেমন List বা Array) নেই, অর্থাৎ আপনি কোন উপাদানটি কোথায় রয়েছে তা সুনির্দিষ্টভাবে চিহ্নিত করতে পারবেন না।
- Immutability: Set এর কিছু বাস্তবায়ন ইমমিউটেবল (অপরিবর্তনীয়) হতে পারে, যেমন
Set.of()যা অ্যালোড করে অপরিবর্তনীয় সেট।
Set Interface এর কিছু জনপ্রিয় Implementations:
- HashSet: এটি
Setইন্টারফেসের সবচেয়ে জনপ্রিয় এবং সাধারণ বাস্তবায়ন। এটি unordered এবং unique উপাদান ধারণ করে এবং সেটে উপাদানগুলোকে অর্ডার করে না। - LinkedHashSet: এটি
HashSetএর মতো, তবে উপাদানগুলো ইনসার্ট হওয়ার অর্ডারে রাখা হয়। - TreeSet: এটি
Setএর একটি সুশৃঙ্খল (sorted) বাস্তবায়ন, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে।
Set এর মধ্যে Unique Elements Management
যেহেতু Set ডুপ্লিকেট উপাদানগুলিকে অনুমোদন করে না, তাই Set এর মাধ্যমে ইউনিক এলিমেন্টস ম্যানেজ করা খুবই সহজ। যখনই আপনি নতুন উপাদান Set তে যোগ করতে চান, Set তার মধ্যে unique উপাদান থাকছে কি না তা নিশ্চিত করে।
Set এর মাধ্যমে Unique Elements Management এর উদাহরণ:
import java.util.HashSet;
import java.util.Set;
public class SetUniqueElementsExample {
public static void main(String[] args) {
// Create a Set (HashSet) to store unique elements
Set<String> uniqueNames = new HashSet<>();
// Adding elements to the Set
uniqueNames.add("Alice");
uniqueNames.add("Bob");
uniqueNames.add("Charlie");
uniqueNames.add("Alice"); // Duplicate element, will not be added
// Display the elements of the Set
System.out.println("Unique Names: " + uniqueNames);
}
}
Output:
Unique Names: [Alice, Bob, Charlie]
ব্যাখ্যা:
uniqueNames.add("Alice"): এখানে প্রথমবারAliceযুক্ত করা হয়।uniqueNames.add("Alice"): দ্বিতীয়বার যখনAliceযোগ করার চেষ্টা করা হয়, তখন এটি ডুপ্লিকেট হিসেবে বিবেচিত হয় এবং এটি অগ্রাহ্য করা হয়।HashSetডুপ্লিকেট মান যোগ করতে দেয় না, তাইSetকেবল একবারAliceমানটিই রাখে।
Set এর মধ্যে Unique Elements Management এর বিশেষ বৈশিষ্ট্যসমূহ:
- ডুপ্লিকেট এন্ট্রির ব্লকিং:
- Set ডুপ্লিকেট মানকে স্বয়ংক্রিয়ভাবে ব্লক করে, যাতে আপনি কোনো উপাদান পুনরায় যুক্ত করার চেষ্টা করলে সেটে তা যুক্ত হবে না।
- উন্নত পারফরম্যান্স:
- HashSet এবং TreeSet বাস্তবায়নগুলিতে ডুপ্লিকেট মান নিয়ন্ত্রণের জন্য উন্নত পারফরম্যান্স রয়েছে। HashSet সাধারণত O(1) টাইম কমপ্লেক্সিটি দিয়ে ডুপ্লিকেট চেক করে।
- Unordered Nature:
- Set সাধারণত unordered হয় (যেমন
HashSet), তবেLinkedHashSet-এ উপাদানগুলি ইনসার্ট হওয়ার অর্ডারে রাখা হয়, এবংTreeSetউপাদানগুলিকে স্বয়ংক্রিয়ভাবে সাজিয়ে রাখে।
- Set সাধারণত unordered হয় (যেমন
Set Interface-এর Example: Different Implementations
1. HashSet:
HashSet হল Set এর সবচেয়ে সাধারণ এবং জনপ্রিয় বাস্তবায়ন। এটি unordered এবং unique উপাদান ধারণ করে।
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Apple"); // Duplicate element, will not be added
System.out.println("HashSet: " + set);
}
}
Output:
HashSet: [Apple, Orange, Banana]
2. LinkedHashSet:
LinkedHashSet হল HashSet এর একটি সংস্করণ, যা উপাদানগুলিকে ইনসার্ট হওয়ার অর্ডারে রাখে।
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Apple"); // Duplicate element, will not be added
System.out.println("LinkedHashSet: " + set);
}
}
Output:
LinkedHashSet: [Apple, Banana, Orange]
3. TreeSet:
TreeSet হল Set এর একটি সুশৃঙ্খল (sorted) বাস্তবায়ন, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে।
import java.util.TreeSet;
import java.util.Set;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Apple");
set.add("Banana");
set.add("Orange");
set.add("Apple"); // Duplicate element, will not be added
System.out.println("TreeSet: " + set);
}
}
Output:
TreeSet: [Apple, Banana, Orange]
- Set ইন্টারফেসটি unique elements ধারণ করতে ব্যবহৃত হয় এবং এটি ডুপ্লিকেট মানগুলোকে ব্লক করে।
- HashSet, LinkedHashSet, এবং TreeSet হল Set ইন্টারফেসের জনপ্রিয় বাস্তবায়ন, যেখানে:
HashSetদ্রুত পারফরম্যান্স দেয় এবং উপাদানগুলিকে অর্ডার অনুসারে রাখে না।LinkedHashSetইনসার্ট করার অর্ডারে উপাদানগুলো রাখে।TreeSetউপাদানগুলোকে স্বয়ংক্রিয়ভাবে সাজানো রাখে।
- Set এর মাধ্যমে unique elements পরিচালনা করা সহজ এবং কার্যকরী, যা ডুপ্লিকেট চেক এবং উচ্চ পারফরম্যান্সে সহায়ক।
Read more