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

جاوا میں نقشہ انٹرفیس

گروپ میں شائع ہوا۔

جاوا میپ انٹرفیس کیا ہے؟

جاوا میپ انٹرفیس جاوا کلیکشن فریم ورک کا ایک حصہ ہے، لیکن یہ کلیکشن انٹرفیس کا ذیلی قسم نہیں ہے۔ تو یہ کہنے، فہرستوں، یا دیگر مجموعہ آبجیکٹ کے مقابلے میں مختلف انداز میں برتاؤ کرتا ہے۔ Map<Key, Value> کا ہر عنصر کلیدی قدر کے جوڑے کی نمائندگی کرتا ہے۔ کلید اور قدر دونوں ہی کچھ چیزیں ہیں۔ کسی خاص نقشے کی تمام کلیدیں منفرد ہوتی ہیں، جبکہ قدریں نہیں ہوتیں، اس لیے انہیں نقل کیا جا سکتا ہے۔ آپ جاوا میں نقشہ کے بارے میں سوچ سکتے ہیں جیسے کہ ایک قسم کی لغت یا آن لائن شاپ کیٹلاگ، جہاں آپ اس کے منفرد انڈیکس کا استعمال کرتے ہوئے کوئی بھی چیز تلاش کر سکتے ہیں۔ کلید نقشہ میں قدر کا منفرد شناخت کنندہ ہے۔ مثال کے طور پر Map<String، Item> میں String آن لائن شاپ سے کچھ آئٹم کی ایک ID ہے۔ دستاویزات کے مطابق نقشہ میں اگلے ذیلی انٹرفیس ہیں:
    پابندیاں _
  • کنکرنٹ میپ<K,V> ;
  • ConcurrentNavigableMap<K,V> ;
  • LogicalMessageContext ;
  • MessageContext ;
  • نیویگیبل میپ<K,V> ;
  • SOAPMessageContext ;
  • ترتیب شدہ نقشہ<K,V> ۔
اور کلاسز کو نافذ کرتا ہے:
  • خلاصہ نقشہ
  • صفات
  • AuthProvider
  • کنکرنٹ ہیش میپ
  • ConcurrentSkipListMap
  • EnumMap
  • ہیش میپ
  • ہیش ٹیبل
  • IdentityHashMap
  • لنکڈ ہیش میپ
  • پرنٹر اسٹیٹ وجوہات
  • پراپرٹیز
  • فراہم کرنے والا
  • رینڈرنگ اشارے
  • سادہ بائنڈنگز
  • ٹیبلر ڈیٹا سپورٹ
  • ٹری میپ
  • UID ڈیفالٹس
  • WeakHashMap
  • Java AbstractMap ایک تجریدی کلاس ہے جو نقشہ کے زیادہ تر انٹرفیس کو نافذ کرتی ہے۔
  • Java HashMap ایک ہیش ٹیبل کا استعمال کرتے ہوئے کلیدی قدر کے جوڑوں کو ذخیرہ کرنے کے لیے ڈیٹا کا ڈھانچہ ہے۔
  • جاوا ٹری میپ درخت کو استعمال کرنے کے لیے ڈیٹا کا ڈھانچہ ہے، یعنی ترتیب شدہ کیز کے ساتھ ڈسپلے۔
  • کمزور کلیدوں کے ساتھ ہیش ٹیبل کو استعمال کرنے کے لیے WeakHashMap ، ان اقدار کے ساتھ ڈسپلے کریں جنہیں کچرا جمع کرنے والے کے ذریعے حذف کیا جا سکتا ہے اگر وہ مزید استعمال نہ ہوں۔
  • LinkedHashMap ایک نقشہ ہے جس میں عناصر کو شامل کرنے کی ترتیب ہے، داخل کرنے کی ترتیب میں تکرار کی اجازت دیتا ہے۔
  • EnumMap Enum کیز کے ساتھ استعمال کے لیے AbstractMap کلاس کو بڑھاتا ہے ۔
  • IdentityHashMap دستاویزات کا موازنہ کرتے وقت حوالہ جاتی مساوات کی جانچ کا استعمال کرتا ہے، Equals() طریقہ کے بجائے == آپریشن کا استعمال کرتے ہوئے کیز کے ساتھ نقشہ سازی کرتا ہے۔
یہاں ہم نقشہ انٹرفیس کے مقبول ترین نفاذ میں دلچسپی رکھتے ہیں: HashMap، TreeMap اور LinkedHashMap۔ ویسے، نقشہ کے عناصر کی ترتیب مخصوص نفاذ پر منحصر ہے۔ کہتے ہیں، TreeMap اور LinkedHashMap میں عناصر کا پیش قیاسی ترتیب ہے، جبکہ HashMap میں ایسا نہیں ہے۔

نقشہ کے طریقے

کسی بھی نقشے کے اہم کام عناصر کو داخل کرنا، ہٹانا اور تلاش کرنا ہے۔
  • پبلک آبجیکٹ پٹ (آبجیکٹ کی، آبجیکٹ ویلیو) نقشے میں ایک عنصر داخل کرتا ہے۔
  • public void putAll (نقشہ کا نقشہ) نقشے کے اندر مخصوص نقشہ داخل کرتا ہے۔
  • عوامی آبجیکٹ ہٹانا (آبجیکٹ کی) مخصوص کلید کے مطابق ایک اندراج کو حذف کرتا ہے۔
  • پبلک آبجیکٹ گیٹ (آبجیکٹ کی) مخصوص کلید کی قدر لوٹاتا ہے۔
  • عوامی بولین containsKey(آبجیکٹ کی) اس نقشے سے مخصوص کلید کو تلاش کرتا ہے۔
  • public Set keySet() ایک سیٹ ویو لوٹاتا ہے جس میں تمام کیز ہوتی ہیں۔
  • public Set entrySet() تمام کلیدوں اور اقدار کے ساتھ ایک سیٹ ویو لوٹاتا ہے۔

HashMap کیا ہے؟

HashMap کیا ہے؟ یہ Map<Key,Value> انٹرفیس کا سب سے مقبول نفاذ ہے۔ یہ ڈیٹا ڈھانچہ ہیشنگ کے اصول پر مبنی ہے۔

HashMap کام کا بنیادی اصول: ہیشنگ

یہ سمجھنے کے لیے کہ ہیش میپ کیا ہے اور یہ کیسے کام کرتا ہے، آئیے پہلے ہیشنگ اور ہیش فنکشنز کے بارے میں بات کرتے ہیں۔ ایک ہیش فنکشن ریاضی کے لحاظ سے صرف ایک فنکشن ہے۔ لہذا کچھ ان پٹ ویلیو (ایک آبجیکٹ، ڈیٹا کا ایک ٹکڑا) ہے اور فنکشن اسے ایک مناسب اصول کا استعمال کرتے ہوئے آؤٹ پٹ ویلیو میں تبدیل کرتا ہے - ایک ہیش۔ اکثر ہیش ایک مناسب لمبائی کا ایک ہیکساڈیسیمل نمبر ہوتا ہے۔ تبدیلی کے عمل کے قواعد مختلف ہو سکتے ہیں، لیکن وہ درج ذیل اصولوں کے تابع ہیں:
  1. ایک خاص ان پٹ (آبجیکٹ) کا ایک خاص ہیش کوڈ ہوتا ہے۔
  2. اگر دو اشیاء برابر ہیں، تو ان کے ہیش کوڈ بھی برابر ہیں۔ الٹا سچ نہیں ہے۔
  3. اگر ہیش کوڈ مختلف ہیں تو، اشیاء یقینی طور پر برابر نہیں ہیں.
  4. بعض اوقات مختلف اشیاء میں ایک ہی ہیش کوڈ ہوسکتا ہے۔ یہ ایک انتہائی غیر متوقع واقعہ ہے، جسے "تصادم" کا نام دیا گیا ہے اور اچھے معیار کے ہیش فنکشن کو تصادم کے امکان کو کم کرنا چاہیے۔
جاوا میں، ہر چیز کا ایک ہیش کوڈ ہوتا ہے۔ اس کا حساب آبجیکٹ کلاس کے ہیش کوڈ طریقہ سے کیا جاتا ہے، تمام جاوا آبجیکٹ کی پیرنٹل کلاس۔ عام طور پر، ڈویلپرز اس طریقہ کو اپنی اپنی کلاسوں کے لیے اوور رائیڈ کرتے ہیں اور ساتھ ہی اس سے وابستہ طریقوں کے برابر ہوتے ہیں ۔

HashMap: یہ کیسے کام کرتا ہے۔

لہذا کلاس HashMap<K,V> جیسا کہ ہر نقشہ پر عمل درآمد کلیدوں اور اقدار پر مشتمل ہوتا ہے۔ یہ ہیشنگ کے اصولوں کا استعمال کرتے ہوئے چابیاں محفوظ کرتا ہے۔ HashMap کے اندر کلیدی قدر کے جوڑے "بکیٹس" میں محفوظ ہوتے ہیں، یہ بالٹیاں مل کر ایک "ٹیبل" بناتی ہیں، منسلک فہرستوں کی ایک اندرونی صف اور اس کا ابتدائی سائز 16 ہے ۔ جاوا میں HashMap ایک بالٹی کا تعین کرنے کے لیے کلید کے ہیش کوڈ کا استعمال کرتا ہے جہاں کلید/قدر کے جوڑے کو نقشہ بنانا چاہیے: ہیش میپ کی مشکل خصوصیت یہ ہے کہ ٹیبل [] کا ہر سیل (بالٹی) نہ صرف ایک جوڑا رکھتا ہے بلکہ متعدد رکھتا ہے۔ وہ ایک واضح آبجیکٹ (جیسے LinkedList) کے طور پر محفوظ نہیں ہیں، بلکہ ایک مضمر سلسلہ کے طور پر۔ سلسلہ اس حقیقت کی وجہ سے بنایا گیا ہے کہ ہر جوڑا اگلی جوڑی کا لنک محفوظ کرتا ہے۔ یعنی تمام HashMap جوڑے 16 زنجیروں میں بکھرے ہوئے ہیں۔ جب آپ ٹیبل میں نیا جوڑا ڈالتے ہیں، تو کلید کا ہیش سمجھا جاتا ہے۔ یہ ہیش کلیدی آبجیکٹ میں شامل ہیش کوڈ فنکشن نہیں ہے۔ اسے 0-15 کی حد میں سمجھا جاتا ہے۔ جوڑے کو ہیش انڈیکس کے ساتھ بالٹی میں ذخیرہ شدہ جوڑوں کی زنجیر میں شامل کیا جاتا ہے۔ یہ نقطہ نظر ہمیں تلاش کی رفتار فراہم کرتا ہے۔ کلید کے ذریعہ ایک جوڑے کی تلاش کے دوران، پوری میز سے گزرنے کی ضرورت نہیں ہے۔ کلید کے ہیش پر غور کیا جاتا ہے اور صرف وہی سلسلہ چیک کیا جاتا ہے جو سیل میں ہیش انڈیکس کے ساتھ محفوظ ہوتا ہے۔ اگر HashMap میں بہت زیادہ جوڑے ہیں، تو زنجیریں بہت لمبی ہو جاتی ہیں۔ پھر صف کا سائز بڑھتا ہے، تمام ذخیرہ شدہ اشیاء کی ہیش کا دوبارہ حساب لگایا جاتا ہے، اور وہ نئی زنجیروں کے ساتھ بکھر جاتے ہیں۔

HashMap اعلامیہ

اگر آپ کلاس HashMap کوڈ پر جاتے ہیں تو آپ کو اگلا اعلان ملے گا:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
جہاں K اس نقشے کے ذریعے برقرار رکھی جانے والی کلیدوں کی قسم ہے اور V - میپ شدہ اقدار کی قسم۔ یہ آپ کے کوڈ میں انٹیجر کلید اور سٹرنگ ویلیو کے ساتھ ہیش میپ ڈیکلریشن کی ایک مثال ہے۔
HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();

ہیش میپ کے طریقے

یہاں HashMap طریقوں کی فہرست ہے۔
  • آبجیکٹ گیٹ (آبجیکٹ کی) مخصوص کلید کی قدر لوٹاتا ہے۔
  • آبجیکٹ ڈال (Key k, Value v) کلیدی ویلیو میپنگ کو نقشے میں داخل کرتا ہے۔
  • آبجیکٹ ہٹانا(آبجیکٹ کی) اگر موجود ہو تو اس نقشے سے مخصوص کلید کے لیے میپنگ کو ہٹاتا ہے۔
  • void clear() HashMap سے کلیدی قدر کے تمام جوڑوں کو ہٹاتا ہے۔
  • آبجیکٹ کلون () کلیدوں اور اقدار کو کلون کیے بغیر اس HashMap مثال کی اتلی کاپی واپس کرتا ہے۔
  • boolean containsKey(آبجیکٹ کلید) درست لوٹاتا ہے اگر مخصوص کلید نقشے میں پائی جاتی ہے، اگر نہیں ہے تو غلط؛
  • boolean containsValue(آبجیکٹ ویلیو) صحیح لوٹاتا ہے اگر مخصوص کلید نقشے میں پائی جاتی ہے، اگر نہیں ہے تو غلط؛
  • boolean isEmpty() اگر نقشہ خالی ہے تو صحیح لوٹاتا ہے، اگر نہیں ہے تو غلط۔
  • سیٹ keySet() نقشے سے حاصل کی گئی چابیاں کا سیٹ لوٹاتا ہے۔
  • int size() کلیدی ویلیو میپنگ کی مقدار واپس کرتا ہے۔
  • مجموعہ اقدار() نقشے کی اقدار کا مجموعہ لوٹاتا ہے۔
  • آبجیکٹ ہٹانا(آبجیکٹ کی) مخصوص کلید کے لیے کلیدی قدر کے جوڑے کو ہٹاتا ہے۔
  • void putAll(Map m) نقشے کے تمام عناصر کو دوسرے نقشے پر کاپی کرتا ہے۔

جاوا ہیش میپ کی مثال

آئیے جاوا ہیش میپ مثال کے ساتھ ایک پروگرام بنائیں تاکہ یہ ظاہر ہو کہ یہ کیسے کام کرتا ہے:
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;

public class HashMap {

   public static void main(String[] args) {

       {

           // HashMap declaration
           HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();

           //Adding elements into HashMap
           myHashMap.put(7, "Johnny");
           myHashMap.put(8, "Ivy");
           myHashMap.put(1, "Rick");
           myHashMap.put(4, "Stan");
           myHashMap.put(3, "Kyle");

           //print out the map content using Iterator
           Set set = myHashMap.entrySet();
           Iterator iterator = set.iterator();
           while (iterator.hasNext()) {
               Map.Entry mapEntry = (Map.Entry) iterator.next();
               System.out.print("key: " + mapEntry.getKey() + " value: ");
               System.out.println(mapEntry.getValue());
           }
           System.out.println("get an element from myHashMap via key and print the value out:");
           System.out.println(myHashMap.get(8));
           //print out hashMap on standard way:
           System.out.println(myHashMap);

           // Get values based on key
           String var = myHashMap.get(2);
           //here we'll get null, we don't have such a key
           System.out.println("Value with key 2: " + var);
           var = myHashMap.get(7);
           System.out.println("Value with key 7: " + var);

           // Remove values based on key
           myHashMap.remove(4);
           System.out.println("myHashMap after removing element:");
           System.out.println(myHashMap);
           myHashMap.clear();
           System.out.println("myHashMap after total clearing:");
           System.out.println(myHashMap);
       }

   }
}
پروگرام چلانے کا نتیجہ:

key: 1 value: Rick
key: 3 value: Kyle
key: 4 value: Stan
key: 7 value: Johnny
key: 8 value: Ivy
get an element from myHashMap via key and print the value out:
Ivy
{1=Rick, 3=Kyle, 4=Stan, 7=Johnny, 8=Ivy}
Value with key 2: null
Value with key 7: Johnny
myHashMap after removing element:
{1=Rick, 3=Kyle, 7=Johnny, 8=Ivy}
myHashMap after total clearing:
{}

ٹری میپ

جاوا میں TreeMap Map<Key,Value> انٹرفیس کو بھی لاگو کرتا ہے، لیکن یہ ریڈ-بلیک ٹری ڈیٹا سٹرکچر پر مبنی ہے۔ ایک درخت "نوڈس" اور لائنوں پر مشتمل ہوتا ہے جو نوڈس - شاخوں کو جوڑتا ہے۔ "جڑ" نوڈ درخت کے اوپر ہوتا ہے۔ جڑ سے شاخیں اور نوڈس ہو سکتے ہیں۔ یہ ایک درجہ بندی کی ساخت ہے، آپ سوچ سکتے ہیں۔ یہ نوڈس جڑ کے "بچے" کے طور پر۔ چائلڈ نوڈ کے اپنے بچے ہو سکتے ہیں - نچلے نوڈس۔ بغیر بچوں کے نوڈس کو "اینڈ نوڈز" یا "پتے" کہا جاتا ہے۔ ایک بائنری ٹری ایک درخت ہے، جہاں ہر نوڈ میں صفر، ایک ہوتا ہے۔ , یا دو بچے۔ بائنری سرچ ٹری ایک ڈھانچہ ہے، جہاں ہر اندرونی نوڈ ایک کلید، اور بعض اوقات ایک منسلک قدر ذخیرہ کرتا ہے، اور اس میں دو ممتاز ذیلی درخت ("بائیں" اور "دائیں") ہوتے ہیں۔ ایک خود توازن بائنری تلاش ٹری ایک نوڈ پر مبنی بائنری سرچ ٹری ہے جو خود بخود اپنی اونچائی (زیادہ سے زیادہ لیولز کی جڑ سے نیچے) کو صوابدیدی آئٹم کے اندراج اور حذف کرنے کی صورت میں چھوٹا رکھتا ہے۔ سرخ-سیاہ درخت خصوصیات کے ساتھ ایک متوازن بائنری درخت ہے:
  • ہر نوڈ یا تو سرخ یا سیاہ ہے۔
  • جڑ ہمیشہ کالی ہوتی ہے۔
  • ہر پتی ایک NIL (خالی، null) نوڈ ہے اور یہ سیاہ ہے۔
  • اگر کوئی نوڈ سرخ ہے تو اس کے بچے ضرور سیاہ ہوتے ہیں۔
  • نوڈ سے نسلی پتے تک ہر آسان راستے میں بلیک نوڈس کی ایک ہی تعداد ہوتی ہے۔

ٹری میپ کی خصوصیات

ٹری میپ کلیدوں کو نوڈس کے طور پر ذخیرہ کرنے کے لیے درخت کے ڈیٹا کا ڈھانچہ استعمال کرتا ہے اور ریڈ-بلیک ٹری الگورتھم کا استعمال کرتے ہوئے کیز کو ترتیب دیتا ہے۔ لہذا، TreeMap اپنے اندراجات کو اپنی چابیاں کی قدرتی ترتیب کے مطابق ترتیب دیتا ہے۔ اعداد کے لیے قدرتی صعودی ترتیب ہے، تاروں کے لیے - حروف تہجی کی ترتیب۔ اگر آپ کو آرڈر کی منطق کو تبدیل کرنے کی ضرورت ہو تو آپ موازنہ کرنے والے کا استعمال کر سکتے ہیں۔ قدرتی طریقے سے اشیاء کو چھانٹنا TreeMap کا ایک بڑا فائدہ ہے، نیز مختلف فلٹرز اور حالات کا استعمال کرتے ہوئے کچھ اشیاء کو تلاش کرنا۔

ٹری میپ کے طریقے

  • آبجیکٹ گیٹ (آبجیکٹ کی) متعلقہ کلید کی قدر لوٹاتا ہے۔
  • آبجیکٹ ڈال (آبجیکٹ کی، آبجیکٹ ویلیو) نقشہ میں نقشہ بندی داخل کرتا ہے۔
  • آبجیکٹ ہٹانا(آبجیکٹ کی) اس کلید کے لیے نقشہ سازی کو ہٹاتا ہے اگر TreeMap اس پر مشتمل ہے۔
  • اگر یہ نقشہ مخصوص کلید کے لیے نقشہ سازی پر مشتمل ہے تو boolean containsKey(آبجیکٹ کلید) درست لوٹاتا ہے۔
  • boolean containsValue(آبجیکٹ ویلیو) درست لوٹاتا ہے اگر TreeMap ایک یا زیادہ کلیدوں کو متعین قدر کے لیے نقشہ بناتا ہے۔
  • آبجیکٹ firstKey() اس وقت ترتیب شدہ نقشے میں پہلی کلید واپس کرتا ہے۔
  • آبجیکٹ lastKey() اس وقت ترتیب شدہ نقشے میں آخری کلید لوٹاتا ہے۔
  • void putAll(نقشہ کا نقشہ) تمام نقشہ جات کو مخصوص نقشے سے نقشے پر نقل کرتا ہے۔
  • سیٹ entrySet() میپنگ کا ایک سیٹ ویو لوٹاتا ہے۔
  • int size() کلیدی ویلیو میپنگ کی مقدار لوٹاتا ہے۔
  • کلیکشن ویلیوز() اقدار کا مجموعہ منظر لوٹاتا ہے۔
  • آبجیکٹ کلون () TreeMap کی اتلی کاپی واپس کرتا ہے۔
  • void clear() TreeMap سے تمام نقشہ جات کو ہٹاتا ہے۔
  • SortedMap headMap(Object key_value) پیرامیٹر key_value سے کم نقشے کے حصے کا منظر لوٹاتا ہے
  • سیٹ کی سیٹ() ٹری میپ میں موجود کیز کا سیٹ ویو لوٹاتا ہے۔
  • SortedMap subMap(K fromKey, K toKey) اس نقشے کے اس حصے کا ایک منظر لوٹاتا ہے جس کی کلید کلید سے لے کر کلیدی تک، خصوصی تک ہوتی ہے۔
  • آبجیکٹ firstKey() TreeMap سے پہلی کلید واپس کرتا ہے۔

TreeMap کی مثال

import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;

public class TreeMapExample {

   public static void main(String args[]) {

       //TreeMap declaration
       TreeMap<Integer, String> myTreeMap = new TreeMap<Integer, String>();

       //put elements to TreeMap
       myTreeMap.put(1, "Stuart");
       myTreeMap.put(23, "Michael");
       myTreeMap.put(7, "Johnny");
       myTreeMap.put(5, "Ivy");
       myTreeMap.put(2, "Alex");

       //Display and print out myTreeMap using Iterator
       Set set = myTreeMap.entrySet();
       Iterator iterator = set.iterator();
       while (iterator.hasNext()) {
           Map.Entry myEntry = (Map.Entry) iterator.next();
           System.out.print("key: " + myEntry.getKey() + " value: ");
           System.out.println(myEntry.getValue());
       }
       //TreeMap printed in classical way
       System.out.println(myTreeMap);
       //removing an element with the key =2
       myTreeMap.remove(2);
       //myTreeMap after removing:
       System.out.println(myTreeMap);
   }
}
پروگرام چلانے کا نتیجہ:

key: 1 value: Stuart
key: 2 value: Alex
key: 5 value: Ivy
key: 7 value: Johnny
key: 23 value: Michael
{1=Stuart, 2=Alex, 5=Ivy, 7=Johnny, 23=Michael}
{1=Stuart, 5=Ivy, 7=Johnny, 23=Michael}

لنکڈ ہیش میپ

LinkedHashMap ایک ڈیٹا ڈھانچہ ہے جو منسلک فہرستوں اور ہیش نقشوں کو یکجا کرتا ہے۔ درحقیقت، LinkedHashMap HashMap کلاس کو بڑھاتا ہے اور نقشہ انٹرفیس کو لاگو کرتا ہے، لیکن اس سے منسلک فہرستوں کا کیا تعلق ہے؟ LinkedHashMap کا اعلان:
Map <Integer, String> linkedHashMap = new LinkedHashMap <Integer, String>();
یہ نیا لنکڈ ہیش میپ ہیش میپ (جیسے ٹیبل، لوڈ فیکٹر، تھریشولڈ، سائز، انٹری سیٹ) کی خصوصیات کو وراثت میں ملا ہے، دو خاص خصوصیات بھی حاصل کرتی ہیں:
  • ہیڈر دوہری منسلک فہرست کا سربراہ ہے۔ ابتداء کے دوران، یہ خود کی طرف اشارہ کرتا ہے
  • accessOrder اشارہ کرتا ہے کہ آئٹریٹر کا استعمال کرتے ہوئے عناصر تک کیسے رسائی حاصل کی جائے۔ اگر درست ہے تو آخری رسائی کی ترتیب میں۔ اگر غلط ہے تو، رسائی اسی ترتیب میں ہوگی جو عناصر کو داخل کیا گیا تھا۔
یہ منسلک فہرست تکرار ترتیب کی وضاحت کرتی ہے۔ عام طور پر، یہ نقشے میں چابیاں داخل کرنے کا حکم ہے۔

لنکڈ ہیش میپ کے طریقے

  • آبجیکٹ گیٹ (آبجیکٹ کلید) وہ قدر لوٹاتا ہے جس میں مخصوص کلید کا نقشہ لگایا گیا ہے، یا اگر اس نقشے میں کلید کے لیے کوئی نقشہ سازی نہیں ہے تو کالعدم
  • void clear() نقشے سے تمام میپنگ کو ہٹاتا ہے۔
  • boolean containsKey(آبجیکٹ کلید) درست لوٹاتا ہے اگر مخصوص عنصر کو ایک یا زیادہ کلیدوں سے میپ کیا جاتا ہے۔
  • اگر نقشہ نقشے سے اپنی سب سے بڑی اندراج کو ہٹاتا ہے تو بولین ریمو ایلڈسٹ اینٹری(نقشہ میں داخل ہونے والا سب سے بڑا) درست ہوجاتا ہے۔
  • Set<Map.Entry<K,V>> entrySet() اس نقشے میں موجود میپنگ کا ایک سیٹ منظر لوٹاتا ہے۔
  • void forEach(BiConsumer<? super K,? super V> ایکشن) اس نقشے میں ہر اندراج کے لیے دی گئی کارروائی اس وقت تک انجام دیتا ہے جب تک کہ تمام اندراجات پر کارروائی نہ ہو جائے یا کارروائی مستثنیٰ نہ ہو۔
  • آبجیکٹ getOrDefault(Object key, V defaultValue) وہ قدر لوٹاتا ہے جس میں مخصوص کلید کو میپ کیا جاتا ہے۔ اگر نقشے میں کلیدی واپسی ڈیفالٹ ویلیو کے لیے میپنگ شامل نہیں ہے۔
  • Set<K> keySet() نقشے میں موجود کلیدوں کا سیٹ ویو لوٹاتا ہے۔
  • boolean removeEldestEntry(Map.Entry<K,V> eldest) درست لوٹتا ہے اگر یہ نقشہ اپنی سب سے بڑی اندراج کو ہٹا دے
  • void replaceAll(BiFunction<? super K,? super V,? extensions V> function) ہر انٹری ویلیو کو اس اندراج پر دیے گئے فنکشن کو استعمال کرنے کے نتیجے کے ساتھ اس وقت تک بدل دیتا ہے جب تک کہ تمام اندراجات پر کارروائی نہ ہو جائے یا فنکشن مستثنیٰ نہ ہو۔
  • مجموعہ<v>values() نقشے میں موجود اقدار کا مجموعہ منظر لوٹاتا ہے۔

LinkedHashMap کی مثال

import java.util.LinkedHashMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
   public class HashLinkedListExample {
       public static void main(String args[]) {
           // LinkedHashMap Declaration
           LinkedHashMap<Integer, String> myLinkedHashMap =
                   new LinkedHashMap<Integer, String>();

           //Adding elements into LinkedHashMap
           myLinkedHashMap.put(7, "Johnny");
           myLinkedHashMap.put(12, "Rick");
           myLinkedHashMap.put(1, "Kyle");
           myLinkedHashMap.put(5, "Percy");
           myLinkedHashMap.put(85, "Sebastian");

           // Generate a Set of entries
           Set set = myLinkedHashMap.entrySet();

           // Display and print out the nodes  of LinkedHashMap
           Iterator iterator = set.iterator();
           while(iterator.hasNext()) {
               Map.Entry me = (Map.Entry)iterator.next();
               System.out.print("key: "+ me.getKey() +
                       " value: "+me.getValue()+"\n");
           }
           //print out HashLinkedMap on standard way:
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(21, "Ivy");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.remove(12);
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(12, "Ronny");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(1, "Stan");
           System.out.println(myLinkedHashMap);
       }
   }
یہاں ہم پانچ عناصر کو شامل کرتے ہوئے ایک نیا LinkedHashMap بناتے ہیں، پھر اسے آئٹریٹر کا استعمال کرتے ہوئے اور کلاسیکی انداز میں پرنٹ آؤٹ کرتے ہیں۔ جیسا کہ آپ دیکھ سکتے ہیں، LinkedHashMap اندراج کے آرڈر کو برقرار رکھتا ہے۔ اس کے بعد ہم اپنے نقشے سے ایک عنصر کو حذف کرتے ہیں، پھر نیا شامل کرتے ہیں اور بعد میں - کلید کے ساتھ ایک اور عنصر، جو نقشے پر پہلے سے موجود ہے۔ یہ اس کلید پر نقش شدہ پرانی قدر کی جگہ لے لیتا ہے۔ پروگرام چلانے کا نتیجہ:

key: 7 value: Johnny
key: 12 value: Rick
key: 1 value: Kyle
key: 5 value: Percy
key: 85 value: Sebastian
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian}
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}
{7=Johnny, 1=Stan, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}

HashMap، TreeMap، LinkedHashMap موازنہ

HashMap، TreeMap، اور LinkedHashMap نقشہ انٹرفیس کے نفاذ ہیں۔ HashMap اور LinkedHashMap ڈیٹا ڈھانچے ہیں جو ہیش کیز ہیں۔ TreeMap تلاش کے درخت کو منظم کرنے کے لیے اپنی کلیدوں کی قدرتی ترتیب کا استعمال کرتا ہے۔ ترتیب:
  • HashMap کوئی ترتیب برقرار نہیں رکھتا ہے۔
  • TreeMap اندراجات کو چابیاں کی صعودی ترتیب میں ترتیب دیتا ہے۔
  • LinkedHashMap اندراج آرڈر کو برقرار رکھتا ہے۔
کالعدم چابیاں:
  • HashMap اور LinkedHashMap ایک null کلید رکھنے کی اجازت دیتا ہے۔
  • LinkedHashMap کلیدوں کی قدرتی ترتیب کے استعمال کی صورت میں null کیز کی اجازت نہیں دیتا ہے یا Comparator null lays پر موازنہ کی حمایت نہیں کرتا ہے۔
آئیے جاوا کے نقشے کی مثال دیتے ہیں جس میں اس مضمون میں نظرثانی شدہ تینوں نفاذ شامل ہیں:
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;

public class CompMapImpl {


    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
        hashMap.put(5, "Ivy");
        hashMap.put(null, "Joker");
        hashMap.put(1, "First");
        hashMap.put(2, "Kyle");
        hashMap.put(-2, "Paul");
        hashMap.put(3, "Sandy");


        treeMap.put(5, "Ivy");
        //treeMap.put(null,"Joker");
        treeMap.put(1, "First");
        treeMap.put(2, "Kyle");
        treeMap.put(-2, "Paul");
        treeMap.put(3, "Sandy");

        linkedHashMap.put(5, "Ivy");
        linkedHashMap.put(null, "Joker");
        linkedHashMap.put(1, "First");
        linkedHashMap.put(2, "Kyle");
        linkedHashMap.put(-2, "Paul");
        linkedHashMap.put(3, "Sandy");
        System.out.println("HashMap");
        System.out.println(hashMap);
        System.out.println("TreeMap");
        System.out.println(treeMap);
        System.out.println("LinkedHashMap");
        System.out.println(linkedHashMap);


        LinkedHashMap<String, String> linkedHashMap1= new LinkedHashMap<> ();
        linkedHashMap1.put(null, "Andy");
        System.out.println(linkedHashMap1);
    }
}
اس پروگرام کو چلانے کا نتیجہ یہ ہے:

HashMap
{null=Joker, 1=First, -2=Paul, 2=Kyle, 3=Sandy, 5=Ivy}
TreeMap
{-2=Paul, 1=First, 2=Kyle, 3=Sandy, 5=Ivy}
LinkedHashMap
{5=Ivy, null=Joker, 1=First, 2=Kyle, -2=Paul, 3=Sandy}
{null=Andy}
جیسا کہ ہم دیکھ سکتے ہیں، ہیش میپ میں عناصر کی ترتیب واضح نہیں ہے، ٹری میپ میں یہ کلیدوں پر منحصر ہے، لنکڈ ہیش میپ میں یہ داخل کرنے کے آرڈر کے بارے میں ہے۔ اگر ہم LinkedHashMap میں null key ڈالنے کی کوشش کریں گے، تو ہمیں NullPointerException ملے گا، لیکن LinkedHashMap1 میں، جہاں کیز String ہیں، ہم یہ کر سکتے ہیں۔ ایک ہیش نقشہ بہترین عمومی مقصد کے نقشے کا نفاذ ہے۔ یہ زیادہ سے زیادہ تلاش کی رفتار، تیز اسٹوریج، اور بازیافت کی کارروائیاں فراہم کرتا ہے، لیکن آپ کو اس کی افراتفری کی ترتیب کے بارے میں یاد رکھنا چاہیے۔ ایک لنک شدہ ہیش میپ ہیش میپ کے فوائد کو وراثت میں دیتا ہے اور کیز کے لیے آرڈر حاصل کرتا ہے۔ تاہم، اس میں LinkedList ہے، جو میموری کے لحاظ سے نسبتاً مہنگا ہے۔ یہ تلاش میں HashMap سے سست ہے اور لنکڈ لسٹ کو برقرار رکھنے کی وجہ سے شامل کرنے/ہٹانے کے لیے تھوڑا سا سست ہے۔ درخت کا نقشہ صعودی ترتیب میں ترتیب دی گئی چابیاں اسٹور کرتا ہے۔ تاہم، یہ HashMap اور LinkedHashMap سے بدتر عمومی کارکردگی پیش کرتا ہے۔ جو کچھ آپ نے سیکھا ہے اس کو تقویت دینے کے لیے، ہم تجویز کرتے ہیں کہ آپ ہمارے جاوا کورس سے ایک ویڈیو سبق دیکھیں
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION