CodeGym /جاوا بلاگ /Random-UR /جاوا میں لنکڈ ہیش سیٹ
John Squirrels
سطح
San Francisco

جاوا میں لنکڈ ہیش سیٹ

گروپ میں شائع ہوا۔
جاوا میں LinkedHashSet کلاس کی بات کرتے ہوئے ، ہمیں یہ بتانے کی ضرورت ہے کہ یہ سیٹ انٹرفیس کو نافذ کرتا ہے۔ LinkedHashSet ایک مجموعہ تخلیق کرتا ہے جو عناصر کو ہیش ٹیبل میں ذخیرہ کرتا ہے لیکن اس کے HashSet ہم منصب کے برعکس عناصر کے اندراج کے آرڈر کو برقرار رکھتا ہے۔

جاوا میں کیا سیٹ ہے۔

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

لنکڈ ہیش سیٹ کلاس

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

LinkedHashSet کی اہم خصوصیات

  • ہم منفرد عناصر کو صرف LinkedHashSet میں محفوظ کر سکتے ہیں۔

  • LinketHashSet ہمیں عناصر کو اسی ترتیب سے نکالنے دیں جو ہم داخل کرتے ہیں۔

  • LinkedHashSet مطابقت پذیر نہیں ہے۔

  • LinkedHashSet کالعدم عناصر کو ذخیرہ کرنے کی اجازت دیتا ہے۔

  • LinkedHashSet ہیش کوڈ کی بنیاد پر ایک مخصوص انڈیکس میں عناصر کو ذخیرہ کرنے کے لیے ہیشنگ تکنیک کا استعمال کرتا ہے

لنکڈ ہیش سیٹ کے طریقے

اس کے والدین کی کلاسوں سے وراثت میں ملنے والے طریقوں کے علاوہ، HashSet مندرجہ ذیل طریقوں کی وضاحت کرتا ہے:
  • boolean add(Object o) اس سیٹ میں مخصوص عنصر شامل کرتا ہے اگر یہ پہلے سے موجود نہیں ہے۔

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

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

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

  • boolean isEmpty() درست لوٹاتا ہے اگر اس سیٹ میں کوئی عنصر شامل نہ ہو۔

  • Iterator iterator() اس سیٹ کے عناصر پر ایک تکرار کرنے والا لوٹاتا ہے۔

  • boolean remove(Object o) اس سیٹ سے مخصوص عنصر کو ہٹاتا ہے، اگر موجود ہو۔

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

Easy LinkedHashSet کی مثالیں نیچے دی گئی مثال میں ہم LinkedHashSet آبجیکٹ کی شروعات اور سیٹ کو بھرنے کے لیے add() طریقہ استعمال کرتے ہوئے دکھاتے ہیں۔
import java.util.LinkedHashSet;
import java.util.Set;

   public class LinkedHashSetEx1 {
       public static void main(String[] args) {
//LinkedHashSet() Init
Set<String> set = new LinkedHashSet<>();
//adding elements to LinkedHashSet
           set.add("Re"); //first added element
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");//last added element


           System.out.println(set);
       }
   }
آؤٹ پٹ ہے:
[ری، ڈو، فا، سول، لا، ٹی، ایم آئی]
جیسا کہ آپ دیکھ سکتے ہیں، ہمارے سیٹ میں عناصر اسی ترتیب میں نمودار ہوئے جس میں ہم نے انہیں رکھا تھا۔ جاوا میں LinkedHashSet - 1

مثال 2. LinkedHashSet میں ڈپلیکیٹ شامل کرنا

آئیے اپنے LinkedHashSet 7 عناصر کو میوزیکل اسکورز کے ناموں کے ساتھ دوبارہ ڈالیں اور ایک نیا عنصر ڈالیں جو پہلے رکھے گئے عناصر میں سے ایک جیسا ہے۔
import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetEx2 {
   public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           set.add("Sol");
           System.out.println(set);
       }
   }
پروگرام کا آؤٹ پٹ یہاں ہے:
[ری، ڈو، فا، سول، لا، ٹی، ایم آئی]
مثال دو کا آؤٹ پٹ بالکل وہی ہے جیسا کہ پہلی مثال میں ہے۔ ہمارے پاس LinkedHashSet مجموعہ میں دو ملتے جلتے عناصر نہیں ہو سکتے ۔ جب ہم دوسرا ڈالنے کی کوشش کرتے ہیں تو اسے نظر انداز کر دیا جاتا ہے۔

مثال 3. LinkedHashSet سے عناصر کو ہٹانا

import java.util.LinkedHashSet;
import java.util.Set;
   public class LinkedHashSet3 {
       public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           System.out.println(set);
           set.remove("Fa");// removing an element from our set
           set.remove("Score");//trying to remove element that isn't in set
           System.out.println(set.remove("Score"));
           System.out.println("Print our set without elements removed: ");
           System.out.println(set);
           set.clear();
           System.out.println("Print out our set after clear command: ");
           System.out.println(set);
       }
   }
پروگرام کا آؤٹ پٹ یہاں ہے:
[Re, Do, Fa, Sol, La, Ti, Mi] غلط ہمارے سیٹ کو بغیر عناصر کے ہٹائے پرنٹ کریں: [Re, Do, Sol, La, Ti, Mi] واضح حکم کے بعد ہمارے سیٹ کو پرنٹ کریں: []
جیسا کہ آپ دیکھ سکتے ہیں، غیر موجود عنصر پر لاگو کردہ ہٹانے () طریقہ پروگرام کی غلطی کا نتیجہ نہیں ہوتا ہے۔ اگر عنصر کو ہٹایا نہیں گیا تھا تو یہ صرف غلط اور صحیح ہے اگر عنصر LinkedHashSet میں تھا اور پھر ہٹا دیا جاتا ہے۔

لنکڈ ہیش سیٹ بمقابلہ ہیش سیٹ

یہ دونوں طبقے قریبی رشتہ دار ہیں۔ تاہم HashSet کے اندر یہ اشیاء کو ذخیرہ کرنے کے لیے HashMap استعمال کرتا ہے جبکہ LinkedHashSet LinkedHashMap استعمال کرتا ہے ۔ اگر آپ کو داخل کرنے کے آرڈر کو برقرار رکھنے کی ضرورت نہیں ہے لیکن آپ کو منفرد اشیاء کو ذخیرہ کرنے کی ضرورت ہے، تو استعمال کرنا زیادہ مناسب ہے HashSet ۔ اگر آپ کو عناصر کے اندراج آرڈر کو برقرار رکھنے کی ضرورت ہے تو LinkedHashSet آپ کی پسند ہے۔ LinkedHashSet کی کارکردگی HashSet کے مقابلے میں تھوڑی سست ہے کیونکہ LinkedHashSet عناصر کے اندراج کی ترتیب کو برقرار رکھنے کے لیے اندرونی LinkedList کا استعمال کرتا ہے۔ آئیے ایک مثال دیتے ہیں:
import java.util.*;

public class LinkedHashSetExample1 {

   public static void main(String[] args) {
       // while regular hash set orders its elements according to its hashcode stamps

       Set<Integer> regularHashSet = new HashSet<>();
       regularHashSet.add(7);
       regularHashSet.add(3);
       regularHashSet.add(5);
       regularHashSet.add(65536);
       regularHashSet.add(9);
       // few duplicates
       regularHashSet.add(5);
       regularHashSet.add(7);

       // next will print:
       // > regularHashSet = [65536, 3, 5, 7, 9]
       System.out.println("regularHashSet = " + regularHashSet);

       // linked hash set keeps order of adding unchanged

       Set<Integer> linkedHashSet = new LinkedHashSet<>();
       linkedHashSet.add(7);
       linkedHashSet.add(3);
       linkedHashSet.add(5);
       linkedHashSet.add(65536);
       linkedHashSet.add(9);
       // few duplicates
       linkedHashSet.add(5);
       linkedHashSet.add(7);

       // next will print:
       // > linkedHashSet = [7, 3, 5, 65536, 9]
       System.out.println("linkedHashSet = " + linkedHashSet);
   }
}
پروگرام کا آؤٹ پٹ یہ ہے:
ریگولر ہیش سیٹ = [65536, 3, 5, 7, 9] لنکڈ ہیش سیٹ = [7, 3, 5, 65536, 9]

حقیقی دنیا کی ایپلی کیشنز میں Java LinkedHashSet کا استعمال

چونکہ LinkedHashSet آپ کو فوری طور پر اندراج کی موجودگی کی جانچ پڑتال کرنے اور آرڈر کو ذخیرہ کرنے کی اجازت دیتا ہے، اس لیے یہ مجموعہ فہرست سے ڈپلیکیٹس کو ختم کرنے کے لیے کافی آسان معلوم ہوتا ہے۔ یا، مثال کے طور پر، میرے بیگ میں حال ہی میں دیکھی گئی آخری چیز جیسے مسائل کو حل کرنا۔ یا، اس طرح کا کھیل یاد ہے، پوکیمون گو؟ LinkedHashSet پوکیمون کی ایک فہرست محفوظ کر سکتا ہے جس کا آپ نے سامنا کیا ہے اور وہ ترتیب جس میں وہ آپ کے راستے پر آئے تھے۔ اس صورت میں، "بار بار" پوکیمون کو مزید فہرست میں شامل نہیں کیا جائے گا۔ یا، مثال کے طور پر، لیول کے لحاظ سے مالکان کی فہرست جو آپ پہلے ہی کسی بھی گیم میں لیول کے ساتھ مل چکے ہیں۔ یا کائناتی اجسام کی دریافت کی تاریخ۔ LinkedHashSet آپ کو فوری طور پر چیک کرنے کی اجازت دیتا ہے کہ آیا اسپیس باڈی پہلے سے فہرست میں ہے یا نہیں، اور اگر وہ موجود نہیں ہے، تو اسے فہرست میں شامل کریں۔ آئیے ڈپلیکیٹس کو ختم کرنے کی ایک مثال لیتے ہیں۔
import java.util.*;

class LinkedHashSetExample2 {
   public static void main(String[] args) {
       List<String> listWithDuplicates = List.of("some","elements","with", "few", "duplicates", "were", "here", "duplicates", "duplicates");

       Set<String> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
       List<String> listWithoutDuplicates = new ArrayList<>(linkedHashSet);

       // next will print:
       // > listWithDuplicates = [some, elements, with, few, duplicates, here, duplicates, duplicates]
       System.out.println("listWithDuplicates = " + listWithDuplicates);
       // next will print:
       // > listWithoutDuplicates = [some, elements, with, few, duplicates, here]
       System.out.println("listWithoutDuplicates = " + listWithoutDuplicates);

       // -------------------------------------------------------------------------

       // while using regular Hash Set will generally produces some unexpected order
       Set<String> regularHashSet = new HashSet<>(listWithDuplicates);

       // next will print:
       // > linkedHashSet = [some, elements, with, few, duplicates, were, here]
       System.out.println("linkedHashSet = " + linkedHashSet);
       // next will print:
       // > regularHashSet = [here, some, with, duplicates, were, elements, few]
       System.out.println("regularHashSet = " + regularHashSet);
   }
}
پروگرام کا آؤٹ پٹ یہاں ہے:
listWithDuplicates = [کچھ، عناصر، کے ساتھ، چند، نقلیں، تھے، یہاں، نقلیں، نقلیں] listWithoutDuplicates = [کچھ، عناصر، کے ساتھ، چند، نقلیں، تھے، یہاں] linkedHashSet = [کچھ، عناصر، کے ساتھ، چند، نقلیں] , were, here] regularHashSet = [یہاں، کچھ، کے ساتھ، نقلیں، تھے، عناصر، چند]
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION