جاوا میں ہیش میپ اور ہیش ٹیبل کا موازنہ کرنا: کلیدی فرق اور کارکردگی

جاوا میں ہیش میپ اور ہیش ٹیبل کا موازنہ کرنا: کلیدی فرق اور کارکردگی
Java

جاوا میں ہیش میپ اور ہیش ٹیبل کو سمجھنا

جاوا جمع کرنے کی دنیا میں، HashMap اور Hashtable کلیدی قدر کے جوڑوں کو ذخیرہ کرنے کے لیے دو وسیع پیمانے پر استعمال ہونے والے ڈیٹا ڈھانچے ہیں۔ اگرچہ وہ ایک جیسے لگ سکتے ہیں، ان میں الگ الگ فرق ہیں جو آپ کی ایپلیکیشن کی کارکردگی اور تھریڈ سیفٹی کو متاثر کر سکتے ہیں۔ اپنی ضروریات کے لیے صحیح انتخاب کے لیے ان اختلافات کو سمجھنا بہت ضروری ہے۔

یہ مضمون HashMap اور Hashtable کے درمیان کلیدی امتیازات پر روشنی ڈالتا ہے، ان کی فعالیت، کارکردگی، اور غیر تھریڈڈ ایپلیکیشنز کے لیے موزوںیت کو دریافت کرتا ہے۔ آخر تک، آپ کو اس بات کا واضح اندازہ ہو جائے گا کہ آپ کے مخصوص استعمال کے معاملے میں کون سا ڈیٹا ڈھانچہ استعمال کرنا ہے۔

کمانڈ تفصیل
HashMap.put() HashMap میں کلیدی قدر کا جوڑا داخل کرتا ہے۔ null کلیدوں اور اقدار کی اجازت دیتا ہے۔
Hashtable.put() ہیش ٹیبل میں کلیدی قدر کا جوڑا داخل کرتا ہے۔ کالعدم کلیدوں یا اقدار کی اجازت نہیں دیتا ہے۔
System.nanoTime() چل رہی جاوا ورچوئل مشین کے ہائی ریزولوشن ٹائم سورس کی موجودہ قدر نینو سیکنڈز میں لوٹاتا ہے۔
try { ... } catch (NullPointerException e) کوڈ پر عمل درآمد کرنے کی کوشش کرتا ہے اور کسی بھی NullPointerExceptions کو پکڑتا ہے، ایسے معاملات کو ہینڈل کرتا ہے جہاں Hashtable.put() کو کالعدم اقدار کے ساتھ کہا جاتا ہے۔
HashMap.get() HashMap سے مخصوص کلید کے ساتھ وابستہ قدر کو بازیافت کرتا ہے۔
Hashtable.get() ہیش ٹیبل سے مخصوص کلید سے وابستہ قدر کو بازیافت کرتا ہے۔

HashMap اور Hashtable نفاذ میں گہرا غوطہ لگائیں۔

پہلا اسکرپٹ کے درمیان براہ راست موازنہ فراہم کرتا ہے۔ HashMap اور Hashtable جاوا میں اسکرپٹ کا آغاز ضروری کلاسوں کو درآمد کرکے اور دونوں ڈیٹا ڈھانچے کی مثالیں بنانے سے ہوتا ہے۔ اے HashMap کلیدی قدر کے جوڑوں کے ساتھ فوری اور آباد کیا جاتا ہے۔ اسی طرح، اے Hashtable بنایا اور آباد کیا جاتا ہے۔ یہ اسکرپٹ پھر null اقدار کو سنبھالنے میں بنیادی فرق کو ظاہر کرتا ہے۔ HashMap.put() بغیر مسائل کے کالعدم اقدار داخل کرنے کی اجازت دیتا ہے، جبکہ Hashtable.put() پھینک دیتا ہے a NullPointerException اگر null کیز یا اقدار کو شامل کرنے کی کوشش کی جاتی ہے۔ دی try { ... } catch (NullPointerException e) اس رویے کی وضاحت کے لیے بلاکس کا استعمال کیا جاتا ہے۔ اسکرپٹ سے ڈویلپرز کو یہ سمجھنے میں مدد ملتی ہے کہ ان دو ڈیٹا ڈھانچے کے درمیان انتخاب کرتے وقت کب اور کیوں کالعدم اقدار پر غور کیا جاتا ہے۔

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

ہیش میپ اور ہیش ٹیبل کا موازنہ کرنا: بنیادی فرق اور استعمال کے معاملات

موازنہ کے لیے جاوا کا نفاذ

import java.util.HashMap;
import java.util.Hashtable;

public class MapComparison {
    public static void main(String[] args) {
        // Creating a HashMap
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("1", "One");
        hashMap.put("2", "Two");
        hashMap.put("3", "Three");

        // Creating a Hashtable
        Hashtable<String, String> hashtable = new Hashtable<>();
        hashtable.put("A", "Apple");
        hashtable.put("B", "Banana");
        hashtable.put("C", "Cherry");

        // Displaying the HashMap
        System.out.println("HashMap: " + hashMap);

        // Displaying the Hashtable
        System.out.println("Hashtable: " + hashtable);

        // Checking for null values
        try {
            hashMap.put(null, "NullValue");
            System.out.println("HashMap allows null values: " + hashMap);
        } catch (NullPointerException e) {
            System.out.println("HashMap does not allow null values");
        }
        try {
            hashtable.put(null, "NullValue");
            System.out.println("Hashtable allows null values: " + hashtable);
        } catch (NullPointerException e) {
            System.out.println("Hashtable does not allow null values");
        }
    }
}

ہیش میپ بمقابلہ ہیش ٹیبل: سنگل تھریڈڈ ماحول میں کارکردگی

غیر تھریڈڈ ایپلی کیشنز کے لیے جاوا پرفارمنس ٹیسٹنگ

import java.util.HashMap;
import java.util.Hashtable;

public class PerformanceTest {
    public static void main(String[] args) {
        // Initializing the maps
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        Hashtable<Integer, Integer> hashtable = new Hashtable<>();

        // Adding elements to HashMap
        long startTime = System.nanoTime();
        for (int i = 0; i < 1000000; i++) {
            hashMap.put(i, i);
        }
        long endTime = System.nanoTime();
        System.out.println("HashMap time: " + (endTime - startTime) + " ns");

        // Adding elements to Hashtable
        startTime = System.nanoTime();
        for (int i = 0; i < 1000000; i++) {
            hashtable.put(i, i);
        }
        endTime = System.nanoTime();
        System.out.println("Hashtable time: " + (endTime - startTime) + " ns");

        // Retrieving elements from HashMap
        startTime = System.nanoTime();
        for (int i = 0; i < 1000000; i++) {
            hashMap.get(i);
        }
        endTime = System.nanoTime();
        System.out.println("HashMap retrieval time: " + (endTime - startTime) + " ns");

        // Retrieving elements from Hashtable
        startTime = System.nanoTime();
        for (int i = 0; i < 1000000; i++) {
            hashtable.get(i);
        }
        endTime = System.nanoTime();
        System.out.println("Hashtable retrieval time: " + (endTime - startTime) + " ns");
    }
}

ہیش میپ اور ہیش ٹیبل: ہم آہنگی اور تھریڈ سیفٹی

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

اس کے برعکس میں، HashMap مطابقت پذیر نہیں ہے اور اس وجہ سے تھریڈ محفوظ نہیں ہے۔ اگر ایک HashMap ایک ساتھ ایک سے زیادہ تھریڈز تک رسائی حاصل کی جاتی ہے، ڈیٹا میں عدم مطابقت اور نسل کے حالات کا خطرہ ہوتا ہے۔ بنانا a HashMap تھریڈ سیف، ڈویلپر استعمال کر سکتے ہیں۔ Collections.synchronizedMap() اسے مطابقت پذیر نقشے میں لپیٹنے کے لیے، یا وہ استعمال کر سکتے ہیں۔ ConcurrentHashMap کلاس جاوا 1.5 میں متعارف کرایا گیا ہے، جو نقشے کے مختلف حصوں تک ہم آہنگ رسائی کی اجازت دے کر بہتر کارکردگی فراہم کرتا ہے۔ یہ بناتا ہے ConcurrentHashMap سمورتی ایپلی کیشنز کے لیے زیادہ موثر انتخاب۔

HashMap اور Hashtable کے بارے میں اکثر پوچھے گئے سوالات

  1. HashMap اور Hashtable کے درمیان بنیادی فرق کیا ہے؟
  2. HashMap مطابقت پذیر نہیں ہے اور null کلیدوں اور اقدار کی اجازت دیتا ہے، جبکہ Hashtable مطابقت پذیر ہے اور null کلیدوں یا اقدار کی اجازت نہیں دیتا ہے۔
  3. سنگل تھریڈ والے ماحول میں کون سا تیز ہے؟
  4. HashMap سنکرونائزیشن اوور ہیڈ کی کمی کی وجہ سے عام طور پر سنگل تھریڈڈ ماحول میں تیز ہوتا ہے۔
  5. آپ HashMap تھریڈ کو محفوظ کیسے بنا سکتے ہیں؟
  6. کا استعمال کرتے ہوئے Collections.synchronizedMap() لپیٹ کرنے کے لئے HashMap یا استعمال کرتے ہوئے ConcurrentHashMap.
  7. کیا ہیش ٹیبل null کیز یا اقدار کو اسٹور کر سکتا ہے؟
  8. نہیں، Hashtable null چابیاں یا اقدار کی اجازت نہیں دیتا اور a پھینک دے گا۔ NullPointerException اگر کوشش کی.
  9. آپ کو کب استعمال کرنا چاہیے Hashtable over HashMap؟
  10. استعمال کریں۔ Hashtable جب تھریڈ سیفٹی کی ضرورت ہوتی ہے اور آپ مطابقت پذیری کی کارکردگی کے اوور ہیڈ کے بارے میں فکر مند نہیں ہوتے ہیں۔
  11. کیا ConcurrentHashMap ہیش ٹیبل کا بہتر متبادل ہے؟
  12. جی ہاں، ConcurrentHashMap کے مقابلے میں بہتر ہم آہنگی اور کارکردگی فراہم کرتا ہے۔ Hashtable.
  13. ہیش میپ تھریڈ سے محفوظ کیوں نہیں ہے؟
  14. HashMap سنگل تھریڈڈ منظرناموں کے لیے ڈیزائن کیا گیا ہے اور اس میں ہم آہنگی کا طریقہ کار شامل نہیں ہے۔
  15. HashMap اور Hashtable ٹکراؤ کو کیسے سنبھالتے ہیں؟
  16. دونوں HashMap اور Hashtable زنجیر کا استعمال کرتے ہوئے تصادم کو ہینڈل کریں، جہاں ہر بالٹی اندراجات کی ایک منسلک فہرست پر مشتمل ہے۔

ہیش میپ اور ہیش ٹیبل پر حتمی خیالات

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