একটি সেট কেবল অনন্য বস্তুর একটি সংগ্রহ। ইউনিক মানে কোন দুটি বস্তুর একই মান থাকতে পারে না। সেট বাস্তবায়নের উপর নির্ভর করে, এটি আদেশ হতে পারে বা নাও হতে পারে। একটি অ্যাবস্ট্রাক্ট ডেটা টাইপ (ADT) হিসাবে জাভা সেটের কয়েকটি মূল ক্রিয়াকলাপ রয়েছে (যেখানে T যে কোনও ডেটা টাইপ যেমন int, স্ট্রিং, বা কোনও শ্রেণির অবজেক্টকে উপস্থাপন করে):

boolean add(T item)
: সেটটিতে আইটেমটি সফলভাবে যোগ করা হলে সত্য এবং আইটেমটি ইতিমধ্যে সেটে থাকলে মিথ্যা প্রদান করে।boolean remove(T item)
: সেট থেকে আইটেমটি সফলভাবে সরানো হলে সত্য এবং অন্যথায় মিথ্যা (যদি আইটেমটি সেটে না থাকে) প্রদান করে।boolean contains(T item)
: আইটেম সেটে থাকলে সত্য এবং অন্যথায় মিথ্যা প্রদান করে।boolean isEmpty()
: সেট খালি হলে true এবং অন্যথায় মিথ্যা ফেরত দেয়।
contains()
এটির জন্য একটি দুর্দান্ত রানটাইম দেয়: O(1) বা O(log n) সময় জটিলতার উপর নির্ভর করে ব্যবহৃত বাস্তবায়নটি a HashSet
বা aTreeSet
, যথাক্রমে। তাই কি জন্য একটি সেট ব্যবহার করা যেতে পারে? ঠিক আছে, যদি আপনাকে অনেকগুলি স্বতন্ত্র বস্তুর ট্র্যাক রাখতে হয় - যেমন আইডি, নাম, বা অন্যান্য অনন্য শনাক্তকারী - এবং ঘন ঘন চেক করুন যে এই জাতীয় সংগ্রহে একটি আইটেম বিদ্যমান আছে কিনা, তাহলে একটি সেট সম্ভবত একটি ভাল পছন্দ। এখানে একটি সেটের একটি উদাহরণ ব্যবহার করা হল: কল্পনা করুন যে আপনার কাছে Student
একটি প্রদত্ত ক্লাসের সমস্ত ছাত্রদের প্রতিনিধিত্বকারী বস্তুর একটি তালিকা রয়েছে। এই শ্রেণীর জন্য প্রতিটির Student
একটি অনন্য নাম (স্ট্রিং) এবং গ্রেড (int) থাকতে পারে। আপনি যদি প্রায়ই সমস্ত A ছাত্রদের (গ্রেড >=90) একটি তালিকা উল্লেখ করতে চান, তাহলে এই তালিকাটি লুপ করা এবং প্রতিবার প্রতিটি শিক্ষার্থীর গ্রেড পরীক্ষা করা ক্লান্তিকর হবে। পরিবর্তে, আপনি একটি HashSet
স্ট্রিং ব্যবহার করতে পারেন যা ক্লাসের সমস্ত A ছাত্রদের ট্র্যাক রাখে, যেমন:
- প্রতিবার ছাত্রদের গ্রেড আপডেট করা হয়, আপনি সহজভাবে পরীক্ষা করতে পারেন যে ছাত্রের নতুন গ্রেড 90-এর থেকে বড় বা সমান বা না।
- যদি তাই হয়, ব্যবহার করে A ছাত্রদের সেটে তাদের যোগ করুন
add()
- যদি তারা ইতিমধ্যে একজন A ছাত্র ছিল, তাহলে এই অপারেশনটি কেবল উপেক্ষা করা হয়।
- যদি না হয়, তাহলে A ব্যবহার করে শিক্ষার্থীদের সেট থেকে তাদের সরিয়ে দিন
remove()
- যদি তারা এই মুহুর্তে একজন A ছাত্র না হয়, তাহলে এই অপারেশনটি কেবল উপেক্ষা করা হয়।
- যদি তাই হয়, ব্যবহার করে A ছাত্রদের সেটে তাদের যোগ করুন
contains(“Johnny Appleseed”)
সেটে কল করে সহজেই তা করতে পারেন। অবশ্যই, এটি একটি সেটের জন্য একটি ব্যবহারের ক্ষেত্রে একটি উদাহরণ, এবং A ছাত্রদের ট্র্যাক রাখার এই নির্দিষ্ট সমস্যাটি অন্য উপায়ে সমাধান করা যেতে পারে।
বাস্তবায়ন: হ্যাশসেট জাভা এবং জাভা ট্রিসেটের উদাহরণ
HashSet
ইন জাভা এবং ইন জাভা উভয়ই TreeSet
আসে java.utils package
। আপনি তাদের যেমন আমদানি করতে পারেন:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
বা
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
জাভা HashSet
এবং জাভা মধ্যে মূল পার্থক্য TreeSet
হল যে TreeSet
সাজানো হয়, যেখানে HashSet
নয়। এই কারণেই TreeSet
কী অপারেশনের জন্য O(log n) সময় জটিলতা রয়েছে, যেখানে HashSet
O(1) বা ধ্রুবক সময়ের জটিলতা রয়েছে; TreeSet
সর্বদা শৃঙ্খলা বজায় রাখতে হবে । পূর্বে উল্লিখিত কী সেট অপারেশনগুলি ছাড়াও, জাভা HashSet
এবং উভয়েরই TreeSet
আরও কয়েকটি সহায়ক ফাংশন রয়েছে:
void clear()
: সমস্ত বস্তুর সেট পরিষ্কার করে।int size()
: সেটে বস্তুর সংখ্যা প্রদান করে।Object clone()
: সেটের একটি অগভীর অনুলিপি প্রদান করে।Iterator iterator()
: প্রথম বস্তু থেকে শুরু করে সেটে একটি পুনরাবৃত্তিকারী ফেরত দেয়।
size()
যদি দেখতে চান যে আপনার কতজন 'A' ছাত্র আছে, অথবা clear()
আপনি যদি সেমিস্টারের শেষে তালিকাটি পরিষ্কার করতে চান তবে আপনি কল করতে পারেন। আপনি clone()
একটি নির্দিষ্ট সময়ে A শিক্ষার্থীদের তালিকার একটি ক্লোন তৈরি করতে এবং রাখতে ব্যবহার করতে পারেন, যেমন মিডটার্ম রিপোর্টের সময় (এইভাবে ক্লোনটি আসলটির সাথে আপ-টু-ডেট থাকে না)।
জাভা হ্যাশসেটের উদাহরণ
জাভাতে ব্যবহৃত sHashSet
এর একটি সংক্ষিপ্ত উদাহরণ এখানে :String
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
আউটপুট: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Java TreeSet উদাহরণ
জাভা সেট উদাহরণ আপনাকে তত্ত্ব বুঝতে সাহায্য করতে পারে। এখানে জাভাতে ব্যবহৃত sTreeSet
এর সংক্ষিপ্ত উদাহরণ:String
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
আউটপুট: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
এখানেই শেষ! আশা করি এটি সাহায্য করেছে 😊
GO TO FULL VERSION