CodeGym /جاوا بلاگ /Random-UR /جاوا سیٹ
John Squirrels
سطح
San Francisco

جاوا سیٹ

گروپ میں شائع ہوا۔
سیٹ جاوا کلیکشن فریم ورک میں ایک انٹرفیس ہے۔ آپ منفرد عناصر کے ساتھ غیر ترتیب شدہ مجموعوں کو نافذ کرنے کے لیے جاوا سیٹ کا استعمال کر سکتے ہیں۔ اس مضمون میں، ہم اس انٹرفیس اور جاوا زبان میں اس کے نفاذ، سیٹ کے ساتھ کام کرنے کے طریقے، اور کچھ مثالیں بھی دینے جا رہے ہیں۔

جاوا سیٹ کیا ہے؟

Set جاوا کلیکشن فریم ورک کا ایک انٹرفیس ہے، لیکن List کے برعکس Set ترتیب شدہ مجموعہ نہیں ہے ۔ اس کا مطلب یہ ہے کہ جاوا سیٹ عناصر کو کسی خاص ترتیب کے بغیر رکھا جاتا ہے۔ لہذا اس پوزیشن پر کوئی کنٹرول نہیں ہے جہاں آپ عنصر داخل کرسکتے ہیں۔ نیز آپ عناصر کو ان کے اشاریہ کے ذریعہ تک رسائی حاصل نہیں کرسکتے ہیں۔ ریاضی کے لحاظ سے، ایک سیٹ منفرد عناصر کا مجموعہ ہے۔ درحقیقت یہ ایک غیر ترتیب شدہ مجموعہ (غیر ترتیب شدہ مجموعہ) ہے، جس میں ایک جیسے عناصر کو ذخیرہ نہیں کیا جا سکتا۔ اگر آپ جان بوجھ کر کسی Set میں ڈپلیکیٹ عنصر شامل کرتے ہیں ، تو اس عمل کو نظر انداز کر دیا جائے گا اور سیٹ تبدیل نہیں ہوگا۔ تاہم اس میں ایک کالعدم عنصر کا ذخیرہ کرنا جائز ہے۔

نفاذات مرتب کریں۔

جاوا سیٹ ایک انٹرفیس ہے، لہذا آپ کو اشیاء بنانے کے لیے اس کے نفاذ میں سے ایک کو استعمال کرنے کی ضرورت ہے۔ یہ HashSet ، TreeSet اور LinkedHashSet ہیں ۔ Set s میں ، ہر عنصر کو صرف ایک مثال میں ذخیرہ کیا جاتا ہے، اور Set کے مختلف نفاذ عناصر کو ذخیرہ کرنے کے لیے ایک مختلف ترتیب کا استعمال کرتے ہیں۔ ایک HashSet میں ، عناصر کی ترتیب کا تعین ایک پیچیدہ الگورتھم سے کیا جاتا ہے۔ اگر سٹوریج آرڈر آپ کے لیے اہم ہے، تو TreeSet کنٹینر استعمال کریں، جو اوپر کی ترتیب میں ترتیب دی گئی اشیاء کو مقابلے کی ترتیب میں اسٹور کرتا ہے، یا LinkedHashSet ، جو عناصر کو اضافی ترتیب میں اسٹور کرتا ہے۔ سیٹ اکثر ممبرشپ ٹیسٹنگ کے لیے استعمال کیے جاتے ہیں تاکہ آپ آسانی سے چیک کر سکیں کہ آیا کوئی شے کسی دیے گئے سیٹ سے تعلق رکھتی ہے، اس لیے عملی طور پر ایک HashSet عمل درآمد جو کہ تیز تلاش کے لیے موزوں ہو عام طور پر منتخب کیا جاتا ہے۔ HashSet ایک مجموعہ ہے جو عناصر کو اندرونی طور پر ذخیرہ کرنے کے لیے hashCode() طریقہ سے واپس آنے والی اپنی ہیش اقدار کا استعمال کرتا ہے ۔ یعنی HashSet<E> کے اندر ، HashMap<E, Object> آبجیکٹ محفوظ ہے، جو HashSet کی قدروں کو کیز کے طور پر محفوظ کرتا ہے۔ ہیش کوڈز کا استعمال آپ کو سیٹ سے عناصر کو تیزی سے تلاش کرنے، شامل کرنے اور ہٹانے کی اجازت دیتا ہے ۔ LinkedHashSet ایک HashSet ہے جو عناصر کو لنکڈ لسٹ میں بھی اسٹور کرتا ہے۔ ایک عام ہیش سیٹ عنصر کی ترتیب کو برقرار نہیں رکھتا ہے۔ سب سے پہلے، سرکاری طور پر یہ صرف موجود نہیں ہے، اور دوسرا، یہاں تک کہ اندرونی ترتیب بھی ڈرامائی طور پر تبدیل ہوسکتی ہے جب صرف ایک عنصر شامل کیا جاتا ہے. اور آپ LinkedHashSet سے ایک ایٹریٹر حاصل کر سکتے ہیں اور اسے تمام عناصر کے عین مطابق ترتیب میں جانے کے لیے استعمال کر سکتے ہیں جس میں انہیں LinkedHashSet میں شامل کیا گیا تھا ۔ اکثر نہیں، لیکن بعض اوقات یہ بہت ضروری ہو سکتا ہے۔ ٹری سیٹ ایک مجموعہ ہے جو عناصر کو قدر کے مطابق درخت کے طور پر محفوظ کرتا ہے۔ 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 removeAll(مجموعہ ج ) اس سیٹ سے اس کے تمام عناصر کو ہٹاتا ہے جو مخصوص مجموعہ (اختیاری آپریشن) میں موجود ہیں۔

  • boolean retainAll(مجموعہ c ) اس سیٹ میں صرف ان عناصر کو برقرار رکھتا ہے جو مخصوص مجموعہ (اختیاری آپریشن) میں موجود ہیں۔

  • void clear( ) سیٹ سے تمام عناصر کو ہٹاتا ہے۔

  • تکرار کرنے والا تکرار کرنے والا () . اس سیٹ میں عناصر پر ایک تکرار کرنے والا لوٹاتا ہے۔

  • int سائز () ۔ اسے سیٹ میں عناصر کی تعداد حاصل کرنے کے لیے استعمال کیا جاتا ہے۔

  • بولین isEmpty() ۔ چیک کرنے کے لیے کہ سیٹ خالی ہے یا نہیں۔

  • بولین پر مشتمل ہے (Object o ) درست لوٹاتا ہے اگر اس سیٹ میں مخصوص عنصر شامل ہو۔

  • تکرار کرنے والا تکرار کرنے والا () . اس سیٹ میں عناصر پر ایک تکرار کرنے والا لوٹاتا ہے۔ عناصر کو کسی خاص ترتیب میں واپس نہیں کیا جاتا ہے۔

  • آبجیکٹ[] toArray() ۔ اس سیٹ کے تمام عناصر پر مشتمل ایک صف لوٹاتا ہے۔ اگر یہ سیٹ اس بات کی کوئی ضمانت دیتا ہے کہ اس کے عناصر کو اس کے تکرار کنندہ کے ذریعہ کس ترتیب سے واپس کیا جاتا ہے، تو اس طریقہ کو عناصر کو اسی ترتیب میں واپس کرنا چاہیے۔

طریقے ArrayList سے ملتے جلتے ہیں ، سوائے اس کے کہ add(Object o) طریقہ صرف سیٹ میں کسی چیز کو شامل کرتا ہے اگر وہ پہلے سے موجود نہ ہو۔ طریقہ کی واپسی کی قیمت درست ہے اگر اعتراض شامل کیا گیا ہے، اور دوسری صورت میں غلط ہے۔ Collection<> انٹرفیس سے وراثت میں ملے کچھ طریقے بھی ہیں : parallelStream() , removeIf() , stream() اور forEach() طریقہ java.lang.Iterable انٹرفیس سے وراثت میں ملا ہے۔

جاوا مین آپریشنز کی مثال سیٹ کریں۔

اس مثال میں، ہم سٹرنگز کی ایک صف بناتے ہیں اور پھر اسے 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());

   }
}
پروگرام کا آؤٹ پٹ یہاں ہے:
[ایلیکس، ایگور، اسٹیورٹ، تانیا، جانی، آئیوی] [ایلیکس، تانیا، جانی، آئیوی] [ایلیکس، دشا، تانیا، جانی، آئیوی] سیٹ کے عناصر کی مقدار = 5 کیا مائی سیٹ خالی ہے؟ غلط کیا ایگور سیٹ میں ہے؟ جھوٹا کیا جانی سیٹ پر ہے؟ سچ ہے کیا میرا سیٹ اب خالی ہے؟ سچ

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, A, B] C

تکرار کرنے والے کے ساتھ مثال قائم کریں۔

آئیے ایک سیٹ بناتے ہیں، پھر اسے ایٹریٹر کا استعمال کرتے ہوئے پرنٹ آؤٹ کرتے ہیں، اور پھر اس میں سے تمام یکساں نمبرز کو ہٹاتے ہیں، ایک ایٹریٹر کا استعمال کرتے ہوئے بھی۔
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 ، جو عناصر کو اضافی ترتیب میں اسٹور کرتا ہے۔

  • اکثر، سیٹ ممبرشپ کی جانچ کے لیے استعمال کیے جاتے ہیں۔ یعنی یہ جانچنا کہ آیا کوئی شے ریاضیاتی معنوں میں دیئے گئے سیٹ سے تعلق رکھتی ہے۔ لہذا اکثر عملی طور پر تمام Set کے نفاذ میں سے، HashSet کو عام طور پر منتخب کیا جاتا ہے۔ یہ نفاذ تیز رفتار تلاش کے لیے موزوں ہے۔

  • آپ کسی سیٹ میں ڈپلیکیٹ عناصر شامل نہیں کر سکتے، لہذا آپ منفرد عناصر کو ذخیرہ کرنے کے لیے سیٹ انٹرفیس کے نفاذ کا استعمال کر سکتے ہیں۔

  • سیٹ آپ کو صرف ایک کالعدم عنصر شامل کرنے کی اجازت دیتا ہے۔

  • سیٹ ایک فہرست نہیں ہے اور اس کے عناصر کے اشاریہ جات یا پوزیشنوں کو سپورٹ نہیں کرتا ہے۔

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