CodeGym /Java Blog /এলোমেলো /জাভা সেট
John Squirrels
লেভেল 41
San Francisco

জাভা সেট

এলোমেলো দলে প্রকাশিত
সেট হল জাভা কালেকশন ফ্রেমওয়ার্কের একটি ইন্টারফেস। আপনি জাভা সেট ব্যবহার করতে পারেন অনন্য উপাদানের সাথে অ-ক্রমবিহীন সংগ্রহ বাস্তবায়ন করতে। এই নিবন্ধে, আমরা এই ইন্টারফেস এবং জাভা ভাষায় এর বাস্তবায়ন, একটি সেটের সাথে কাজ করার পদ্ধতি এবং কিছু উদাহরণ দিতে যাচ্ছি।

জাভা সেট কি

সেট হল জাভা কালেকশন ফ্রেমওয়ার্কের একটি ইন্টারফেস, কিন্তু তালিকার বিপরীতে সেট একটি অর্ডার করা সংগ্রহ নয় । এর মানে হল যে জাভা সেট উপাদানগুলি একটি নির্দিষ্ট ক্রম ছাড়াই রাখা হয়। সুতরাং অবস্থানের উপর কোন নিয়ন্ত্রণ নেই যেখানে আপনি একটি উপাদান সন্নিবেশ করতে পারেন। এছাড়াও আপনি তাদের সূচক দ্বারা উপাদানগুলি অ্যাক্সেস করতে পারবেন না। গাণিতিকভাবে, একটি সেট অনন্য উপাদানের একটি সংগ্রহ। আসলে, এটি একটি unordered Collection (unordered Collection), যাতে অভিন্ন উপাদান সংরক্ষণ করা যায় না। আপনি যদি ইচ্ছাকৃতভাবে একটি সেটে একটি সদৃশ উপাদান যোগ করেন , তাহলে এই ক্রিয়াটি উপেক্ষা করা হবে এবং সেটটি পরিবর্তন হবে না৷ তবে এটিতে একটি শূন্য উপাদান সংরক্ষণ করা অনুমোদিত।

বাস্তবায়ন সেট করুন

জাভা সেট একটি ইন্টারফেস, তাই আপনাকে অবজেক্ট তৈরি করতে এর বাস্তবায়নের একটি ব্যবহার করতে হবে। এগুলো হল HashSet , TreeSet এবং LinkedHashSetসেট s- এ , প্রতিটি উপাদান শুধুমাত্র একটি উদাহরণে সংরক্ষণ করা হয়, এবং সেটের বিভিন্ন বাস্তবায়ন উপাদানগুলি সংরক্ষণের জন্য একটি ভিন্ন ক্রম ব্যবহার করে। একটি হ্যাশসেটে , উপাদানগুলির ক্রম একটি জটিল অ্যালগরিদম দ্বারা নির্ধারিত হয়। স্টোরেজ অর্ডার আপনার কাছে গুরুত্বপূর্ণ হলে, একটি TreeSet কন্টেইনার ব্যবহার করুন, যা তুলনামূলক ক্রমানুসারে আরোহী ক্রমে সাজানো বস্তু বা LinkedHashSet ব্যবহার করে।, যা অতিরিক্ত ক্রমে উপাদান সংরক্ষণ করে। সেটগুলি প্রায়শই সদস্যপদ পরীক্ষার জন্য ব্যবহার করা হয় যাতে আপনি সহজেই পরীক্ষা করতে পারেন যে কোনও বস্তু একটি নির্দিষ্ট সেটের অন্তর্গত কিনা, তাই অনুশীলনে দ্রুত সন্ধানের জন্য অপ্টিমাইজ করা হ্যাশসেট বাস্তবায়ন সাধারণত বেছে নেওয়া হয়। হ্যাশসেট হল এমন একটি সংগ্রহ যা অভ্যন্তরীণভাবে উপাদানগুলিকে সংরক্ষণ করতে হ্যাশকোড() পদ্ধতি দ্বারা প্রত্যাবর্তিত তাদের হ্যাশ মানগুলি ব্যবহার করে । অর্থাৎ, HashSet<E> এর ভিতরে , HashMap<E, Object> অবজেক্টটি সংরক্ষণ করা হয়, যা হ্যাশসেটের মান কী হিসাবে সংরক্ষণ করে। হ্যাশ কোড ব্যবহার করে আপনি দ্রুত অনুসন্ধান করতে, যোগ করতে এবং একটি সেট থেকে উপাদানগুলি সরাতে পারবেন । LinkedHashSet একটি হ্যাশসেটএটি একটি লিঙ্ক তালিকায় উপাদান সঞ্চয় করে। একটি সাধারণ হ্যাশসেট উপাদানের ক্রম বজায় রাখে না। প্রথমত, আনুষ্ঠানিকভাবে এটি কেবল বিদ্যমান নয়, এবং দ্বিতীয়ত, এমনকি অভ্যন্তরীণ ক্রম নাটকীয়ভাবে পরিবর্তিত হতে পারে যখন শুধুমাত্র একটি উপাদান যোগ করা হয়। এবং আপনি লিঙ্কডহ্যাশসেট থেকে একটি ইটারেটর পেতে পারেন এবং লিঙ্কডহ্যাশসেটে যে ক্রমে যুক্ত করা হয়েছিল সেই ক্রমে সমস্ত উপাদানগুলির মধ্য দিয়ে যেতে এটি ব্যবহার করতে পারেন । প্রায়ই নয়, তবে কখনও কখনও এটি খুব প্রয়োজনীয় হতে পারে। একটি TreeSet হল একটি সংগ্রহ যা উপাদানগুলিকে একটি মূল্য-অর্ডারযুক্ত গাছ হিসাবে সংরক্ষণ করে। TreeSet<E> এর ভিতরে রয়েছে একটি TreeMap<E, Object> যা এই সমস্ত মান সঞ্চয় করে। এবং এই TreeMapউপাদান সংরক্ষণ করার জন্য একটি লাল-কালো সুষম বাইনারি গাছ ব্যবহার করে। অতএব, এটিতে খুব দ্রুত add() , remove() , contains() অপারেশন রয়েছে।

একটি সেট অবজেক্ট তৈরি করুন

একটি সেট অবজেক্ট তৈরি করতে আপনি পরবর্তী ফর্মগুলির একটি ব্যবহার করতে পারেন:

Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
এখানে একটি সাধারণ উদাহরণ, যেখানে আমরা 2 সেট s, HashSet এবং LinkedHashSet তৈরি করি এবং প্রতিটিতে 5টি উপাদান যোগ করি। আমরা এর জন্য add() পদ্ধতি ব্যবহার করতে পারি।

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

public class HashSetTest {
    public static void main(String[] args) {
        Set mySet = new HashSet();
        Set mySet2 = new LinkedHashSet();
//adding some string elements
        mySet.add("Stuart");
        mySet.add("Alex");
        mySet.add("Johnny");
        mySet.add("Igor");
        mySet.add("Bel");
        System.out.println(mySet);
        mySet2.add("Stuart");
        mySet2.add("Alex");
        mySet2.add("Johnny");
        mySet2.add("Igor");
        mySet2.add("Bel");
        System.out.println(mySet2);
    }
}
এখানে প্রোগ্রামের আউটপুট:
[অ্যালেক্স, ইগর, স্টুয়ার্ট, জনি, বেল] [স্টুয়ার্ট, অ্যালেক্স, জনি, ইগর, বেল]
আমরা উপরে উল্লিখিত হিসাবে, HashSet উপাদানের ক্রম বজায় রাখে না, কিন্তু LinkedHashSet করে। এটি LinkedHashSet ছিল যেটি আমাদের উপাদানগুলিকে সেই ক্রমে দিয়েছিল যা আমরা সেটে লিখেছিলাম।

জাভা সেট পদ্ধতি

এখানে জাভা সেটের কিছু গুরুত্বপূর্ণ পদ্ধতি রয়েছে:
  • বুলিয়ান অ্যাড(ই ই) । সেটে নির্দিষ্ট উপাদান যোগ করে যদি এটি ইতিমধ্যে উপস্থিত না থাকে (ঐচ্ছিক অপারেশন)।

  • বুলিয়ান অপসারণ (অবজেক্ট o) । এই সেট থেকে নির্দিষ্ট উপাদান সরিয়ে দেয় যদি এটি উপস্থিত থাকে (ঐচ্ছিক অপারেশন)।

  • বুলিয়ান রিমুভ অ্যাল(সংগ্রহ গ) । এই সেট থেকে এর সমস্ত উপাদানগুলিকে সরিয়ে দেয় যা নির্দিষ্ট সংগ্রহে রয়েছে (ঐচ্ছিক অপারেশন)।

  • বুলিয়ান রিটেনঅল(সংগ্রহ গ) । নির্দিষ্ট সংগ্রহে (ঐচ্ছিক ক্রিয়াকলাপ) থাকা এই সেটের উপাদানগুলিই ধরে রাখে।

  • অকার্যকর পরিষ্কার() । সেট থেকে সমস্ত উপাদান সরিয়ে দেয়।

  • পুনরাবৃত্তিকারী পুনরাবৃত্তিকারী() । এই সেটের উপাদানগুলির উপর একটি পুনরাবৃত্তিকারী প্রদান করে।

  • int আকার() । এটি সেটে উপাদানের সংখ্যা পেতে ব্যবহৃত হয়।

  • বুলিয়ান isEmpty() । সেট খালি কি না তা পরীক্ষা করতে।

  • বুলিয়ান ধারণ করে (অবজেক্ট o) । যদি এই সেটে নির্দিষ্ট উপাদান থাকে তাহলে সত্য দেখায়।

  • পুনরাবৃত্তিকারী পুনরাবৃত্তিকারী() । এই সেটের উপাদানগুলির উপর একটি পুনরাবৃত্তিকারী প্রদান করে। উপাদান কোন নির্দিষ্ট ক্রমে ফেরত দেওয়া হয়.

  • অবজেক্ট[] টু অ্যারে() । এই সেটের সমস্ত উপাদান সমন্বিত একটি অ্যারে প্রদান করে। যদি এই সেটটি তার উপাদানগুলিকে তার পুনরাবৃত্তিকারী দ্বারা ফেরত দেওয়া হয় তা সম্পর্কে কোনও গ্যারান্টি দেয় তবে এই পদ্ধতিটি অবশ্যই একই ক্রমে উপাদানগুলিকে ফেরত দেবে।

পদ্ধতিগুলি ArrayList এর মতই , ব্যতীত add(Object o) পদ্ধতিটি শুধুমাত্র সেটে একটি বস্তু যোগ করে যদি এটি ইতিমধ্যে সেখানে না থাকে। বস্তু যোগ করা হলে পদ্ধতির রিটার্ন মান সত্য, এবং অন্যথায় মিথ্যা। সংগ্রহ<> ইন্টারফেস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত কিছু পদ্ধতি রয়েছে : parallelStream() , removeIf() , stream() এবং forEach() পদ্ধতি java.lang.Iterable ইন্টারফেস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।

Java সেট প্রধান অপারেশন উদাহরণ

এই উদাহরণে, আমরা স্ট্রিংগুলির একটি অ্যারে তৈরি করি এবং তারপর Arrays.asList অপারেশন ব্যবহার করে এটিকে mySet- এ পাস করি। তারপরে আমরা আরও কয়েকটি উপাদান সরিয়ে ফেলি এবং আরও কয়েকটি যোগ করি। এই ক্ষেত্রে, সেটের একটি উপাদান ইতিমধ্যেই বিদ্যমান: এটি যোগ করা হবে না। আমরা শূন্যতা isEmpty() চেক করার ক্রিয়াকলাপগুলিও চেষ্টা করব , সেট সাইজ() এর আকার নির্ধারণ করা এবং সমস্ত উপাদানের সেট পরিষ্কার() পরিষ্কার করা ।

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class HashSetTest2 {
   public static void main(String[] args) {
       //creating a string Array with some names
       String [] friends =  {"Stuart", "Ivy", "Johnny", "Alex", "Igor", "Tanya"};
       //creating a new set and adding elements from string array into it
       Set<String> mySet = new HashSet<>(Arrays.asList(friends));
       System.out.println(mySet);
       //removing two elements from the set
       mySet.remove("Igor");
       mySet.remove("Stuart");

       System.out.println(mySet);

       //adding 2 new Elements into set
       mySet.add("Dasha");
       mySet.add("Alex"); //it's second Alex, can't be added
       System.out.println(mySet);
       //cheking the size of mySet
       int size = mySet.size();
       System.out.println("The quantity of set's elements = " + size);
       //Checking if the set is empty
       System.out.println("Is mySet empty? " + mySet.isEmpty());
       //checking if some elements are in set
       System.out.println("Is Igor in set? " + mySet.contains("Igor"));
       System.out.println("Is Johnny in set? "+ mySet.contains("Johnny"));
       //deleting all elements from the set
       mySet.clear();
       System.out.println("Is mySet empty now? " + mySet.isEmpty());

   }
}
প্রোগ্রামের আউটপুট এখানে:
[Alex, Igor, Stuart, Tanya, Johnny, Ivy] [Alex, Tanya, Johnny, Ivy] [Alex, Dasha, Tanya, Johnny, Ivy] সেটের উপাদানের পরিমাণ = 5 মাইসেট কি খালি? মিথ্যা ইগর কি সেটে আছে? মিথ্যা জনি সেটে আছে? সত্য মাইসেট এখন খালি? সত্য

LinkedHashSet এর সাথে উদাহরণ এবং অ্যারে সেট করুন

এর অন্য প্রোগ্রাম লিখুন. এটিতে, আমরা LinkedHashSet এর উপর ভিত্তি করে একটি সেট তৈরি করব , এতে উপাদান যোগ করব এবং তারপর সেটটিকে একটি অ্যারেতে রূপান্তর করব।

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
   public class LinkedHashSet3 {
       public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("C");
           set.add("D");
           set.add("E");
           set.add("F");
           set.add("G");
           set.add("A");
           set.add("B");
           System.out.println(set);
           set.remove("F");// removing an element from our set
           set.remove("C sharp");//trying to remove element that isn't in set
           System.out.println(set.remove("C sharp"));
           System.out.println("Print our set with elements removed: ");
           System.out.println(set);

//set to array
           String strArray[] = set.toArray(new String[set.size()]);
           System.out.println("New Array from set: ");
           System.out.println(Arrays.toString(strArray));
           System.out.println(strArray[0]);

       }
   }
এখানে প্রোগ্রামের আউটপুট:
[C, D, E, F, G, A, B] মিথ্যা আমাদের সেট মুদ্রণ করুন উপাদানগুলি দিয়ে মুদ্রণ করুন: [C, D, E, G, A, B] সেট থেকে নতুন অ্যারে: [C, D, E, G, ক, খ] গ

পুনরাবৃত্তিকারীর সাথে উদাহরণ সেট করুন

আসুন একটি সেট তৈরি করি, তারপর এটিকে একটি ইটারেটর ব্যবহার করে প্রিন্ট আউট করি, এবং তারপর এটি থেকে সমস্ত জোড় সংখ্যা মুছে ফেলি, এটিও একটি পুনরাবৃত্তিকারী ব্যবহার করে।

import java.util.*;

public class SetTest5
{
   public static void main(String[] args)
   {

       Set<Integer> mySet = new HashSe<>();
       for(int i = 0; i < 10; i++)
           mySet.add(i);

       Iterator iterator = mySet.iterator();

       //simple iteration
       while(iterator.hasNext()){
           int i = (int) iterator.next();
       }
       System.out.println(" " + mySet);

       //modification of mySet using iterator - removing all even numbers
       iterator = mySet.iterator();
       while(iterator.hasNext()){
           int x = (int) iterator.next();
           if(x%2 == 0) iterator.remove();
       }
       System.out.println(mySet);

       }
}
প্রোগ্রামের আউটপুট এখানে:
[০, ১, ২, ৩, ৪, ৫, ৬, ৭, ৮, ৯] [১, ৩, ৫, ৭, ৯

TreeSet সহ উদাহরণ

যদি সাজানো আপনার কাছে গুরুত্বপূর্ণ হয়, তাহলে TreeSet বাস্তবায়ন ব্যবহার করুন। এই সংক্ষিপ্ত উদাহরণে, আমরা আগের উদাহরণগুলির মতো বন্ধুদের নাম দিয়ে সেটটি পূরণ করব। যাইহোক, একটি সাজানো TreeSet- এ , উপাদানগুলি অবিলম্বে সাজানো ক্রমে লেখা হবে। এই ক্ষেত্রে, নামগুলি বর্ণানুক্রমিকভাবে প্রদর্শিত হবে।

import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {

   public static void main(String[] args) {

       Set mySet = new TreeSet<>();
       mySet.add("Stuart");
       mySet.add("Alex");
       mySet.add("Johnny");
       mySet.add("Igor");
       mySet.add("Bel");
       System.out.println(mySet);

   }
আউটপুট হল:
[অ্যালেক্স, বেল, ইগর, জনি, স্টুয়ার্ট]

সংক্ষিপ্ত সিদ্ধান্ত

  • জাভা সেট ইন্টারফেস হল জাভা কালেকশন ফ্রেমওয়ার্কের অংশ।

  • বাস্তবায়িত ক্লাস: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet

  • সবচেয়ে জনপ্রিয় সেট বাস্তবায়ন হল HashSet , LinkedHashSet এবং TreeSet

  • HashSet উপাদানের ক্রম একটি জটিল অ্যালগরিদম দ্বারা নির্ধারিত হয়। স্টোরেজ অর্ডার আপনার কাছে গুরুত্বপূর্ণ হলে, একটি TreeSet কন্টেইনার ব্যবহার করুন, যা তুলনামূলক ক্রমানুসারে আরোহী ক্রমে সাজানো বস্তু সংরক্ষণ করে, অথবা একটি LinkedHashSet , যা উপাদানগুলিকে অতিরিক্ত ক্রমে সঞ্চয় করে।

  • প্রায়শই, সেটগুলি সদস্যতা পরীক্ষা করতে ব্যবহৃত হয়। অর্থাৎ, গাণিতিক অর্থে একটি বস্তু প্রদত্ত সেটের অন্তর্গত কিনা তা পরীক্ষা করা। তাই প্রায়শই অনুশীলনে সমস্ত সেট বাস্তবায়নের মধ্যে, হ্যাশসেট সাধারণত বেছে নেওয়া হয়। এই বাস্তবায়ন দ্রুত অনুসন্ধানের জন্য অপ্টিমাইজ করা হয়েছে.

  • আপনি একটি সেটে ডুপ্লিকেট উপাদান যোগ করতে পারবেন না, তাই আপনি অনন্য উপাদান সংরক্ষণ করতে সেট ইন্টারফেসের বাস্তবায়ন ব্যবহার করতে পারেন।

  • সেট আপনাকে শুধুমাত্র একটি নাল উপাদান যোগ করতে দেয়।

  • সেট একটি তালিকা নয় এবং এর উপাদানগুলির সূচী বা অবস্থান সমর্থন করে না।

মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION