सेट हा जावा कलेक्शन फ्रेमवर्कमधील इंटरफेस आहे. अनन्य घटकांसह अक्रमित संग्रह लागू करण्यासाठी तुम्ही Java सेट वापरू शकता . या लेखात, आम्ही हा इंटरफेस आणि जावा भाषेतील त्याची अंमलबजावणी, सेटसह कार्य करण्याच्या पद्धती आणि काही उदाहरणे देखील पाहू.

जावा सेट म्हणजे काय

सेट हा जावा कलेक्शन फ्रेमवर्कचा इंटरफेस आहे, परंतु सेट हा सूचीच्या विपरीत ऑर्डर केलेला संग्रह नाही . याचा अर्थ असा की जावा सेट घटक विशिष्ट ऑर्डरशिवाय ठेवले जातात. त्यामुळे तुम्ही ज्या स्थानावर घटक घालू शकता त्यावर कोणतेही नियंत्रण नाही. तसेच तुम्ही त्यांच्या अनुक्रमणिकेनुसार घटकांमध्ये प्रवेश करू शकत नाही. गणितीयदृष्ट्या, संच हा अद्वितीय घटकांचा संग्रह आहे. खरं तर, हा एक अक्रमित संग्रह (अक्रमित संग्रह) आहे, ज्यामध्ये एकसारखे घटक संग्रहित केले जाऊ शकत नाहीत. तुम्ही जाणूनबुजून सेटमध्ये डुप्लिकेट घटक जोडल्यास , या क्रियेकडे दुर्लक्ष केले जाईल आणि सेट बदलणार नाही. तथापि त्यात एक शून्य घटक ठेवण्याची परवानगी आहे.

अंमलबजावणी सेट करा

Java Set हा एक इंटरफेस आहे, त्यामुळे तुम्हाला ऑब्जेक्ट्स तयार करण्यासाठी त्याच्या अंमलबजावणीपैकी एक वापरण्याची आवश्यकता आहे. हे हॅशसेट , ट्रीसेट आणि लिंक्डहॅशसेट आहेत . सेट s मध्ये , प्रत्येक घटक फक्त एका प्रसंगात संग्रहित केला जातो आणि सेटची भिन्न अंमलबजावणी घटक संचयित करण्यासाठी भिन्न क्रम वापरते. हॅशसेटमध्ये , घटकांचा क्रम जटिल अल्गोरिदमद्वारे निर्धारित केला जातो . स्टोरेज ऑर्डर तुमच्यासाठी महत्त्वाची असल्यास, TreeSet कंटेनर वापरा, जो चढत्या क्रमाने क्रमवारी लावलेल्या वस्तू तुलनात्मक क्रमाने किंवा LinkedHashSet वापरा., जे घटक अतिरिक्त क्रमाने संग्रहित करते. सेट्स बर्‍याचदा सदस्यत्व चाचणीसाठी वापरले जातात जेणेकरून एखादी वस्तू दिलेल्या संचाशी संबंधित आहे की नाही हे तुम्ही सहजपणे तपासू शकता, म्हणून सराव मध्ये जलद लुकअपसाठी ऑप्टिमाइझ केलेले हॅशसेट अंमलबजावणी सहसा निवडली जाते. हॅशसेट हा एक संग्रह आहे जो अंतर्गत घटक संचयित करण्यासाठी हॅशकोड() पद्धतीद्वारे परत केलेली हॅश मूल्ये वापरतो . म्हणजेच, HashSet<E> च्या आत , HashMap<E, Object> ऑब्जेक्ट संग्रहित केला जातो, जो हॅशसेटची मूल्ये की म्हणून संग्रहित करतो . हॅश कोड वापरल्याने तुम्हाला सेटमधून घटक द्रुतपणे शोधण्याची, जोडण्याची आणि काढण्याची परवानगी मिळते . लिंक्डहॅशसेट हा हॅशसेट आहेजे घटक जोडलेल्या सूचीमध्ये देखील संग्रहित करते. सामान्य हॅशसेट घटक क्रम राखत नाही. प्रथम, अधिकृतपणे ते अस्तित्वात नाही आणि दुसरे म्हणजे, जेव्हा फक्त एक घटक जोडला जातो तेव्हा अंतर्गत क्रम देखील नाटकीयरित्या बदलू शकतो. आणि तुम्ही LinkedHashSet वरून एक पुनरावृत्तीकर्ता मिळवू शकता आणि ते LinkedHashSet मध्ये जोडल्या गेलेल्या सर्व घटकांच्या अचूक क्रमाने जाण्यासाठी वापरू शकता . अनेकदा नाही, पण कधी कधी ते खूप आवश्यक असू शकते. ट्रीसेट हा एक संग्रह आहे जो घटकांना मूल्य-क्रमांकित वृक्ष म्हणून संग्रहित करतो. TreeSet<E> च्या आत एक TreeMap<E, Object> आहे जो ही सर्व मूल्ये संग्रहित करतो. आणि हा TreeMapघटक साठवण्यासाठी लाल-काळा संतुलित बायनरी ट्री वापरते. त्यामुळे, त्यात अतिशय जलद add() , remove() , समाविष्ट() ऑपरेशन्स आहेत.

एक सेट ऑब्जेक्ट तयार करा

सेट ऑब्जेक्ट तयार करण्यासाठी तुम्ही पुढीलपैकी एक फॉर्म वापरू शकता:

Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
येथे एक साधे उदाहरण आहे, जिथे आपण 2 Set 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 ने आम्हाला घटक दिले ज्या क्रमाने आम्ही ते सेटवर लिहिले.

जावा सेट पद्धती

जावा सेटच्या काही महत्त्वाच्या पद्धती येथे आहेत:
  • बुलियन अॅड(ई ई) . निर्दिष्ट घटक आधीच उपस्थित नसल्यास सेटमध्ये जोडते (पर्यायी ऑपरेशन).

  • बुलियन रिमूव्ह (ऑब्जेक्ट ओ) . या सेटमधून निर्दिष्ट घटक काढून टाकते जर ते उपस्थित असेल (पर्यायी ऑपरेशन).

  • बुलियन रिमूव्ह ऑल(संग्रह c) . या संचातून निर्दिष्‍ट कलेक्‍शनमध्‍ये असलेले सर्व घटक काढून टाकते (पर्यायी ऑपरेशन).

  • बुलियन रिटेन ऑल (संग्रह c) . या संचातील केवळ तेच घटक राखून ठेवते जे निर्दिष्ट संग्रहामध्ये समाविष्ट आहेत (पर्यायी ऑपरेशन).

  • शून्य स्पष्ट() . सेटमधून सर्व घटक काढून टाकते.

  • इटरेटर इटरेटर() . या संचातील घटकांवर पुनरावृत्ती करणारा परत करतो.

  • int आकार() . ते सेटमधील घटकांची संख्या मिळविण्यासाठी वापरले जाते.

  • बुलियन isEmpty() . सेट रिकामा आहे की नाही हे तपासण्यासाठी.

  • बुलियनमध्ये (ऑब्जेक्ट o) समाविष्ट आहे . या सेटमध्ये निर्दिष्ट घटक असल्यास खरे मिळवते.

  • इटरेटर इटरेटर() . या संचातील घटकांवर पुनरावृत्ती करणारा परत करतो. घटक कोणत्याही विशिष्ट क्रमाने परत केले जातात.

  • ऑब्जेक्ट[] toArray() . या सेटमधील सर्व घटकांचा समावेश असलेला अॅरे मिळवते. जर हा संच त्याचे घटक त्याच्या पुनरावृत्तीद्वारे कोणत्या क्रमाने परत केले जातील याची कोणतीही हमी देतो, तर या पद्धतीने घटक त्याच क्रमाने परत केले पाहिजेत.

पद्धती ArrayList सारख्याच आहेत , त्याशिवाय add(Object o) पद्धत सेटमध्ये ऑब्जेक्ट जोडते जर ती आधीपासून नसेल. जर ऑब्जेक्ट जोडला असेल तर पद्धतीचे रिटर्न व्हॅल्यू खरे आहे आणि अन्यथा असत्य आहे. कलेक्शन<> इंटरफेस मधून वारशाने मिळालेल्या काही पद्धती देखील आहेत : parallelStream() , removeIf() , stream() आणि forEach() पद्धत java.lang.Iterable इंटरफेस वरून वारशाने प्राप्त झाली आहे.

Java मुख्य ऑपरेशन्सचे उदाहरण सेट करा

या उदाहरणात, आम्ही स्ट्रिंग्सचा अ‍ॅरे तयार करतो आणि नंतर Arrays.asList ऑपरेशन वापरून मायसेटला पास करतो . मग आम्ही आणखी काही घटक काढून टाकतो आणि आणखी काही घटक जोडतो. या प्रकरणात, सेटमधील घटकांपैकी एक आधीच अस्तित्वात आहे: ते जोडले जाणार नाही. आम्ही रिक्तपणा isEmpty() तपासणे , सेट आकार() चा आकार निश्चित करणे आणि सर्व घटकांचा संच clear() साफ करणे या ऑपरेशन्सचा देखील प्रयत्न करू .

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 mySet रिक्त आहे का? खोटे इगोर सेटमध्ये आहे का? जॉनी सेटवर आहे का? खरे मायसेट आता रिकामा आहे का? खरे

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 .

  • हॅशसेट , लिंक्डहॅशसेट आणि ट्रीसेट ही सर्वात लोकप्रिय सेट अंमलबजावणी आहेत .

  • हॅशसेट घटक क्रम जटिल अल्गोरिदमद्वारे निर्धारित केला जातो. स्टोरेज ऑर्डर तुमच्यासाठी महत्त्वाची असल्यास, TreeSet कंटेनर वापरा, जो चढत्या क्रमाने क्रमवारी लावलेल्या वस्तूंना तुलनात्मक क्रमाने संग्रहित करतो, किंवा LinkedHashSet , जो घटक अतिरिक्त क्रमाने संग्रहित करतो.

  • बहुतेकदा, सेट्स सदस्यत्वाची चाचणी घेण्यासाठी वापरतात. म्हणजे, एखादी वस्तू गणिताच्या दृष्टीने दिलेल्या संचाची आहे की नाही हे तपासणे. त्यामुळे सरावातील सर्व सेट अंमलबजावणींपैकी बहुतेकदा हॅशसेट निवडला जातो. ही अंमलबजावणी जलद शोधासाठी अनुकूल आहे.

  • तुम्ही सेटमध्ये डुप्लिकेट घटक जोडू शकत नाही, त्यामुळे तुम्ही अद्वितीय घटक संचयित करण्यासाठी सेट इंटरफेसची अंमलबजावणी वापरू शकता.

  • सेट तुम्हाला फक्त एक शून्य घटक जोडण्याची परवानगी देतो.

  • सेट ही सूची नाही आणि त्याच्या घटकांच्या अनुक्रमणिका किंवा स्थानांना समर्थन देत नाही.