CodeGym /جاوا بلاگ /Random-SD /جاوا سيٽ
John Squirrels
سطح
San Francisco

جاوا سيٽ

گروپ ۾ شايع ٿيل
سيٽ جاوا ڪليڪشن فريم ورڪ ۾ هڪ انٽرفيس آهي. توھان استعمال ڪري سگھوٿا جاوا سيٽ غير ترتيب ڏنل مجموعن کي لاڳو ڪرڻ لاءِ منفرد عناصر سان. هن آرٽيڪل ۾، اسان هن انٽرفيس کي ڏسڻ وارا آهيون ۽ جاوا ٻولي ۾ ان تي عمل ڪرڻ، هڪ سيٽ سان ڪم ڪرڻ جا طريقا، ۽ ڪجهه مثال پڻ ڏينداسين.

جاوا سيٽ ڇا آهي

سيٽ جاوا ڪليڪشن فريم ورڪ مان هڪ انٽرفيس آهي، پر سيٽ هڪ ترتيب ڏنل مجموعو ناهي، فهرست جي برعڪس . ان جو مطلب اهو آهي ته جاوا سيٽ عناصر رکيل آهن بغير ڪنهن خاص ترتيب جي. تنهنڪري پوزيشن تي ڪو به ڪنٽرول ناهي جتي توهان هڪ عنصر داخل ڪري سگهو ٿا. انهي سان گڏ توهان عناصر تائين رسائي نٿا ڪري سگهو انهن جي انڊيڪس ذريعي. رياضياتي طور، هڪ سيٽ منفرد عناصر جو مجموعو آهي. حقيقت ۾، هي هڪ غير ترتيب ٿيل مجموعو آهي (غير ترتيب ڏنل مجموعو)، جنهن ۾ هڪجهڙائي عناصر کي ذخيرو نٿو ڪري سگهجي. جيڪڏهن توهان ڄاڻي واڻي هڪ سيٽ ۾ هڪ نقلي عنصر شامل ڪيو ، اهو عمل نظر انداز ڪيو ويندو ۽ سيٽ تبديل نه ٿيندو. تنهن هوندي به ان ۾ هڪ null عنصر ذخيرو ڪرڻ جي اجازت آهي.

لاڳو ڪرڻ مقرر ڪريو

جاوا سيٽ هڪ انٽرفيس آهي، تنهنڪري توهان کي شيون ٺاهڻ لاءِ ان جي عملن مان هڪ کي استعمال ڪرڻ جي ضرورت آهي. اهي آهن HashSet ، TreeSet ۽ LinkedHashSet . سيٽ s ۾ ، هر عنصر صرف هڪ مثال ۾ ذخيرو ٿيل آهي، ۽ سيٽ جي مختلف عملن کي عناصر کي محفوظ ڪرڻ لاء مختلف ترتيب استعمال ڪري ٿو. هڪ HashSet ۾ ، عناصر جو حڪم هڪ پيچيده الگورتھم طرفان طئي ڪيو ويندو آهي. جيڪڏهن اسٽوريج آرڊر توهان لاءِ اهم آهي، هڪ TreeSet ڪنٽينر استعمال ڪريو، جيڪو ذخيرو ڪري ٿو شين کي ترتيب ڏنل ترتيب سان مقابلي جي ترتيب ۾، يا هڪ LinkedHashSet ، جيڪو اضافي ترتيب ۾ عناصر کي ذخيرو ڪري ٿو. سيٽ اڪثر ڪري رڪنيت جي جاچ لاءِ استعمال ڪيا ويندا آهن ته جيئن توهان آساني سان چيڪ ڪري سگهو ته ڪو اعتراض ڏنل سيٽ سان تعلق رکي ٿو، تنهن ڪري عملي طور تي هڪ HashSet عمل درآمد جيڪو تيز ڏسڻ لاءِ بهتر ڪيو ويو آهي عام طور تي چونڊيو ويندو آهي. HashSet هڪ مجموعو آهي جيڪو استعمال ڪري ٿو انهن جي هيش قدرن کي واپس ڪيو hashCode() طريقي سان عناصر کي اندروني طور تي ذخيرو ڪرڻ لاءِ. اهو آهي، HashSet<E> جي اندر ، HashMap<E، Object> اعتراض ذخيرو ٿيل آهي، جيڪو HashSet جي قدرن کي ڪيز طور محفوظ ڪري ٿو. هيش ڪوڊ استعمال ڪرڻ توهان کي جلدي ڳولڻ، شامل ڪرڻ ۽ عناصر کي هٽائڻ جي اجازت ڏئي ٿو سيٽ . LinkedHashSet ھڪڙو HashSet آھي جيڪو ھڪڙي ڳنڍيل لسٽ ۾ عناصر کي ذخيرو ڪري ٿو. هڪ عام HashSet عنصر ترتيب برقرار نه رکندو آھي. پهرين، سرڪاري طور تي اهو صرف موجود ناهي، ۽ ٻيو، اندروني ترتيب پڻ ڊرامي طور تبديل ٿي سگهي ٿو جڏهن صرف هڪ عنصر شامل ڪيو وڃي. ۽ توهان LinkedHashSet مان هڪ آئٽرٽر حاصل ڪري سگهو ٿا ۽ ان کي استعمال ڪرڻ لاءِ استعمال ڪري سگهو ٿا سڀني عنصرن کي صحيح ترتيب ۾ جنهن ۾ اهي شامل ڪيا ويا آهن 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 SetHashSet ۽ 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 هو جنهن اسان کي ترتيب ڏني ته اسان انهن کي سيٽ تي لکيو.

جاوا سيٽ جا طريقا

هتي جاوا سيٽ جا ڪجهه اهم طريقا آهن:
  • بوليان اضافو (اي اي) . مقرر ڪيل عنصر کي سيٽ ۾ شامل ڪري ٿو جيڪڏھن اھو اڳ ۾ ئي موجود نه آھي (اختياري آپريشن).

  • boolean هٽايو (Object o) . هن سيٽ مان مخصوص عنصر کي هٽائي ٿو جيڪڏهن اهو موجود آهي (اختياري آپريشن).

  • boolean removeAll (مجموعي c) . ھن سيٽ مان ھٽائي ٿو ان جا سڀئي عنصر جيڪي مخصوص ڪيل مجموعي ۾ شامل آھن (اختياري آپريشن).

  • boolean retainAll (مجموعي c) . هن سيٽ ۾ صرف انهن عناصر کي برقرار رکي ٿو جيڪي مخصوص مجموعي ۾ شامل آهن (اختياري آپريشن).

  • خالي خالي () . سيٽ مان سڀني عناصر کي هٽائي ٿو.

  • آئيٽرٽر آئٽرٽر () . هن سيٽ ۾ عناصرن تي هڪ آئٽرٽر واپس ڏئي ٿو.

  • int size() . اهو سيٽ ۾ عناصر جو تعداد حاصل ڪرڻ لاء استعمال ڪيو ويندو آهي.

  • boolean isEmpty() . چيڪ ڪرڻ لاءِ ته سيٽ خالي آهي يا نه.

  • boolean تي مشتمل آهي (Object o) . واپسي صحيح آھي جيڪڏھن ھن سيٽ ۾ مخصوص عنصر شامل آھي.

  • آئيٽرٽر آئٽرٽر () . هن سيٽ ۾ عناصرن تي هڪ آئٽرٽر واپس ڏئي ٿو. عناصر ڪنهن خاص ترتيب ۾ واپس نه ڪيا ويا آهن.

  • Object[] toArray() . هن سيٽ ۾ سڀني عنصرن تي مشتمل هڪ صف واپس ڪري ٿو. جيڪڏهن هي سيٽ ڪنهن به ضمانت ڏئي ٿو ته ان جي عناصر کي ان جي آئٽرٽر طرفان واپس ڪيو ويو آهي، اهو طريقو ساڳيو ئي عناصر کي واپس ڪرڻ گهرجي.

اهي طريقا ساڳيا آهن ArrayList ، سواءِ ان جي ته add(Object o) طريقو صرف هڪ اعتراض کي سيٽ ۾ شامل ڪري ٿو جيڪڏهن اهو اڳ ۾ ئي موجود ناهي. طريقي جي واپسي جي قيمت صحيح آهي جيڪڏهن اعتراض شامل ڪيو ويو آهي، ۽ ٻي صورت ۾ غلط. اتي پڻ ڪجھ طريقا آھن جن مان ورثي ۾ مليا آھن ڪليڪشن<> انٽرفيس: parallelStream() , removeIf() , stream() ۽ forEach() طريقو java.lang.Iterable انٽرفيس مان ورثي ۾ مليا آھن.

Java سيٽ ڪريو مکيه آپريشن جو مثال

هن مثال ۾، اسان تارن جو هڪ صف ٺاهيو ۽ پوءِ ان کي Arrays.asList آپريشن استعمال ڪندي mySet ڏانهن موڪليو . ان کان پوء اسان ڪجھ وڌيڪ عناصر کي هٽايو، ۽ ڪجھ وڌيڪ شامل ڪريو. انهي حالت ۾، سيٽ ۾ موجود عناصر مان هڪ اڳ ۾ ئي موجود آهي: اهو شامل نه ڪيو ويندو. اسان به ڪوشش ڪنداسين خالي جي چڪاس جي عملن کي 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 ڇا منهنجو سيٽ خالي آهي؟ غلط آهي Igor سيٽ ۾ آهي؟ ڪوڙو ڇا جاني سيٽ ۾ آهي؟ صحيح ڇا منهنجي سيٽ هاڻي خالي آهي؟ سچو

مثال LinkedHashSet سان ۽ سيٽ تي Array

اچو ته ٻيو پروگرام لکون. ان ۾، اسان 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, اَ، ب] ج

Iterator سان مثال قائم ڪريو

اچو ته هڪ سيٽ ٺاهيو، پوءِ ان کي آئٽرٽر استعمال ڪندي پرنٽ ڪريون، ۽ پوءِ ان مان سڀ ايون نمبر هٽائي، پڻ هڪ ائٽريٽر استعمال ڪندي.

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);

       }
}
پروگرام جو نتيجو هتي آهي:
[0، 1، 2، 3، 4، 5، 6، 7، 8، 9] [1، 3، 5، 7، 9

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 ، جيڪو اضافي ترتيب ۾ عناصر کي ذخيرو ڪري ٿو.

  • گهڻو ڪري، سيٽ رڪنيت کي جانچڻ لاء استعمال ڪيو ويندو آهي. اهو آهي، چيڪ ڪرڻ لاء ته ڇا هڪ اعتراض رياضياتي معنى ۾ ڏنل سيٽ سان تعلق رکي ٿو. تنهن ڪري اڪثر گهڻو ڪري عملي طور تي سڀني سيٽ تي عمل درآمد، HashSet عام طور تي چونڊيو ويندو آهي. هن عمل کي تيز ڳولا لاءِ بهتر ڪيو ويو آهي.

  • توهان هڪ سيٽ ۾ نقلي عناصر شامل نٿا ڪري سگهو، تنهنڪري توهان منفرد عناصر کي ذخيرو ڪرڻ لاء سيٽ انٽرفيس جي عملن کي استعمال ڪري سگهو ٿا.

  • سيٽ توهان کي صرف هڪ null عنصر شامل ڪرڻ جي اجازت ڏئي ٿو.

  • سيٽ هڪ فهرست نه آهي ۽ ان جي عناصر جي انڊيڪس يا پوزيشن کي سپورٽ نٿو ڪري.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION