CodeGym /جاوا بلاگ /Random-UR /جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات ا...
John Squirrels
سطح
San Francisco

جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔ حصہ 10

گروپ میں شائع ہوا۔
ہائے! کسی چیز میں ماسٹر بننے میں کتنے گھنٹے لگتے ہیں؟ میں نے اکثر کچھ ایسا سنا ہے: "کسی بھی چیز میں ماسٹر بننے کے لیے، آپ کو اس پر 10,000 گھنٹے خرچ کرنے کی ضرورت ہے۔" یہ ایک خوفناک نمبر ہے، ہے نا؟ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 10 - 1پھر بھی، میں حیران ہوں کہ کیا یہ سچ ہے۔ اور میں مسلسل یہ جاننے کی کوشش کر رہا ہوں کہ میں نے پروگرامنگ کے فن میں مہارت حاصل کرنے میں پہلے ہی کتنے گھنٹے لگائے ہیں۔ اور جب میں 10,000 گھنٹے کی اس خاص لائن کو عبور کر کے ماسٹر بنوں گا تو کیا مجھے فرق محسوس ہوگا؟ یا کیا میں نے اس لائن کو بہت عرصہ پہلے ہی عبور کیا تھا بغیر اس کا احساس کیے؟ کسی بھی طرح سے، آپ کو پروگرامر بننے کے لیے اتنا بڑا وقت لگانے کی ضرورت نہیں ہے۔ اہم بات یہ ہے کہ اپنے وقت کو سمجھداری سے استعمال کریں۔ آپ کا بنیادی مقصد انٹرویو لینا ہے۔ اور انٹرویوز میں، سافٹ ویئر ڈویلپرز سے پہلے تھیوری کے بارے میں پوچھا جاتا ہے، اس لیے اسے ایک مضبوطی کی ضرورت ہے۔ درحقیقت، جیسے ہی آپ انٹرویو کی تیاری کرتے ہیں، آپ کا کام بنیادی جاوا تھیوری کے علم میں موجود تمام خلاء کو دریافت کرنا اور پھر انہیں پُر کرنا ہے۔ آج میں یہاں آپ کی مدد کرنے کے لیے حاضر ہوں، کیونکہ آج سے ہم انٹرویو کے سب سے مشہور سوالات کا اپنا جائزہ جاری رکھیں گے۔ ٹھیک ہے، چلو جاری رکھیں!

89. ایک ArrayList لنکڈ لسٹ سے کیسے مختلف ہے؟

HashMap کی اندرونی ساخت کے بارے میں سوال کے ساتھ یہ سب سے زیادہ مقبول سوالات میں سے ایک ہے ۔ اس کے بغیر کوئی انٹرویو مکمل نہیں ہوتا، اس لیے آپ کا جواب آسانی سے آپ کی زبان سے نکل جانا چاہیے۔ واضح کے علاوہ (ان کے مختلف نام ہیں)، وہ ان کی اندرونی ساخت میں مختلف ہیں. اس سے پہلے، ہم نے ArrayList اور LinkedList دونوں کے اندرونی ڈھانچے پر تبادلہ خیال کیا ، لہذا میں ان کے نفاذ کی تفصیلات میں غوطہ نہیں لگاؤں گا۔ میں صرف آپ کو یاد دلاؤں گا کہ ArrayList ایک اندرونی صف کا استعمال کرتے ہوئے لاگو کیا جاتا ہے جس کا سائز اس فارمولے کے مطابق متحرک طور پر بڑھتا ہے:
<size of the current array> * 3 / 2 + 1
مزید برآں، ایک LinkedList کے نفاذ میں ایک اندرونی دوگنا منسلک فہرست کا استعمال کیا جاتا ہے، یعنی، ہر عنصر میں پچھلے اور اگلے عناصر کا حوالہ ہوتا ہے، سوائے فہرست کے شروع اور آخر میں موجود عناصر کے۔ انٹرویو لینے والے یہ سوال اس طرح پوچھنا پسند کرتے ہیں، "کون سا بہتر ہے، ArrayList یا LinkedList ؟" آپ کو پکڑنے کی امید ہے. سب کے بعد، اگر آپ کہتے ہیں کہ ایک یا دوسرا بہتر ہے، تو آپ نے غلط جواب دیا ہے. جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 10 - 2اس کے بجائے، آپ کو اس مخصوص صورتحال کو واضح کرنا چاہیے جس کے بارے میں آپ بات کر رہے ہیں: انڈیکس کے ذریعے عناصر تک رسائی حاصل کرنا یا فہرست کے وسط میں داخل کرنا۔ پھر، ان کے جواب پر منحصر ہے، آپ وضاحت کر سکتے ہیں کہ کون سا بہتر ہے۔ میں نے پہلے بتایا کہ ArrayList اور LinkedList ہر صورتحال میں کیسے کام کرتے ہیں۔ آئیے موازنہ کے لیے انہیں ایک قطار میں رکھ کر اس کا خلاصہ کریں: ایک عنصر شامل کرنا (اضافہ کریں)
  1. اگر کسی اشاریہ کی وضاحت نہیں کی گئی ہے، تو دونوں قسم کی فہرستوں کے لیے ایک نیا آئٹم خود بخود آخر میں شامل ہو جائے گا۔ LinkedList میں ، نیا عنصر نئی دم بن جائے گا (صرف حوالہ جات کا ایک جوڑا دوبارہ لکھا جائے گا، لہذا الگورتھمک پیچیدگی O(1) ہے )۔

    شامل کرنے کا طریقہ سرنی ( O(1) ) میں آخری خالی سیل میں ایک عنصر کا اضافہ کرتا ہے۔

  2. انڈیکس کے ذریعہ کسی آئٹم کو شامل کرنے کا مطلب عام طور پر اسے فہرست کے بیچ میں کہیں داخل کرنا ہوتا ہے۔ لنکڈ لسٹ میں ، طریقہ پہلے ٹیل اور ہیڈ ( O(n/2) ) سے عناصر کو دہراتے ہوئے مطلوبہ مقام کی تلاش کرے گا اور پھر دونوں طرف عناصر کے حوالہ جات کو اوور رائٹ کرکے ویلیو داخل کرے گا جہاں نیا عنصر داخل کیا گیا ہے ( O(1) )۔ اس آپریشن کی مجموعی الگورتھمک پیچیدگی O(n/2) ہوگی ۔

    اسی صورت حال میں (انڈیکس کے ذریعے شامل کرنا)، ایک ArrayList مطلوبہ مقام ( O(1) ) تلاش کرتی ہے اور پھر دائیں جانب واقع تمام عناصر کو (بشمول مخصوص انڈیکس میں پہلے سے ذخیرہ شدہ عنصر) کو ایک ایک کرکے دائیں جانب شفٹ کر دیتی ہے۔ ایک نئی داخلی صف کی تخلیق اور اس میں عناصر کاپی کرنے کی ضرورت ہو سکتی ہے) ( O(n/2) )۔ مجموعی پیچیدگی O(n/2) ہے ۔

  3. LinkedList کے آغاز میں کسی عنصر کو شامل کرنا آخر میں ایک عنصر کو شامل کرنے کے مترادف ہے: نیا عنصر نیا ہیڈ بن جاتا ہے ( O(1) )۔ لیکن ایک ArrayList کے لیے، اس آپریشن کے لیے تمام عناصر کو دائیں طرف منتقل کرنے کی ضرورت ہوتی ہے ( O(n)

سب سے اہم بات یہ ہے کہ لنکڈ لسٹ کے لیے الگورتھمک پیچیدگی O(1) سے O(n/2) تک ہوگی ۔ ایک اور مشاہدہ یہ ہے کہ اندراج فہرست کے اختتام یا آغاز کے جتنا قریب ہوگا، اتنا ہی تیز ہوگا۔ ArrayList کے لیے ، الگورتھمک پیچیدگی O(1) سے O(n) تک ہوتی ہے، اور اندراج فہرست کے اختتام کے جتنا قریب ہوتا ہے، اتنا ہی تیز ہوتا ہے۔ ایک عنصر کی ترتیب (سیٹ) یہ آپریشن کسی بھی موجودہ عنصر کو اوور رائٹ کرتے ہوئے، فہرست میں مخصوص پوزیشن پر ایک عنصر لکھتا ہے۔ LinkedList میں ، یہ آپریشن شامل کرنے کے مترادف ہے، کیونکہ یہاں سب سے بڑا چیلنج عنصر کے مقام کو تلاش کرنا ہے۔ موجودہ عنصر کو حوالہ جات کے ایک جوڑے کو اپ ڈیٹ کر کے اوور رائٹ کر دیا جاتا ہے، لہذا ہمارے پاس ایک الگورتھمک پیچیدگی ہے جو فہرست کے اختتام یا شروع سے مطلوبہ پوزیشن کے فاصلے پر منحصر ہے، O(1) سے O(n/2) تک مختلف ہوتی ہے۔ لیکن ایک ArrayList کے لیے ، یہ آپریشن مطلوبہ سیل کو بذریعہ index تلاش کرتا ہے اور وہاں نیا عنصر لکھتا ہے۔ سیٹ آپریشن کی طرح، انڈیکس کے ذریعہ تلاش کرنے میں O(1) کی الگورتھمک پیچیدگی ہوتی ہے ۔ انڈیکس کے ذریعہ عنصر حاصل کرنا (حاصل کریں) لنکڈ لسٹ سے عنصر حاصل کرنا اسی تلاش کے اصول کی پیروی کرتا ہے جو دوسرے کاموں میں استعمال ہوتا ہے۔ پیچیدگی اختتام یا شروع سے فاصلے پر منحصر ہے، یعنی یہ O(1) سے O(n/2) تک مختلف ہوتی ہے ۔ جیسا کہ پہلے بتایا گیا ہے، ایک ArrayList کے لیے ، اندرونی صف میں انڈیکس کے لحاظ سے ایک عنصر کو تلاش کرنے میں O(1) کی پیچیدگی ہوتی ہے ۔ ایک عنصر کو انڈیکس کے ذریعے ہٹانا (ہٹائیں) LinkedList کے لیے ، وہی اصول ایک بار پھر لاگو ہوتا ہے۔ سب سے پہلے، عنصر واقع ہے، اور پھر حوالہ جات کو دوبارہ لکھا جاتا ہے، حذف شدہ عنصر کے پڑوسی اب ایک دوسرے کا حوالہ دیتے ہیں، حذف شدہ عنصر کے حوالہ جات کو ختم کرتے ہوئے، جو بعد میں کوڑا اٹھانے والے کے ذریعہ صاف کیا جائے گا۔ دوسرے الفاظ میں، الگورتھمک پیچیدگی اب بھی ایک جیسی ہے — یہ O(1) سے O(n/2) تک مختلف ہوتی ہے ۔ ArrayList کے لیے ، یہ آپریشن ایک نیا عنصر (add) شامل کرنے جیسا ہے۔ سب سے پہلے، طریقہ مطلوبہ عنصر ( O(1) ) کو تلاش کرتا ہے، اسے ہٹاتا ہے، اور پھر دائیں جانب واقع تمام عناصر کو ایک قدم بائیں جانب منتقل کر دیا جاتا ہے تاکہ ہٹانے سے پیدا ہونے والے خلا کو بند کیا جا سکے۔ کسی عنصر کو ہٹانے میں وہی الگورتھمک پیچیدگی ہوتی ہے جو کہ ایڈ آپریشن کی ہوتی ہے — O(1) سے O(n) تک. ہٹا دیا گیا عنصر فہرست کے اختتام کے جتنا قریب ہوگا، اس آپریشن کی الگورتھمک پیچیدگی اتنی ہی کم ہوگی۔ اور اب ہم نے تمام اہم کارروائیوں کا احاطہ کر لیا ہے۔ میں آپ کو یاد دلاتا ہوں کہ ان دو اقسام کی فہرستوں کا موازنہ کرتے وقت، آپ کو اس مخصوص صورتحال کو واضح کرنے کی ضرورت ہے جس میں وہ استعمال ہو رہی ہیں۔ تب ہی آپ انٹرویو لینے والے کے سوال کا واضح جواب دے سکتے ہیں۔

90. ایک ArrayList ہیش سیٹ سے کیسے مختلف ہے؟

اگر ہم آپریشن بہ آپریشن کی بنیاد پر ArrayList اور LinkedList کا موازنہ کر سکتے ہیں تاکہ یہ تعین کیا جا سکے کہ کون سا بہتر ہے، ہمیں ArrayList اور HashSet کے درمیان اس طرح کا موازنہ کرنا اتنا آسان نہیں لگے گا ، کیونکہ یہ بالکل مختلف مجموعہ ہیں۔ آپ ایک میٹھے کا دوسرے سے موازنہ کر سکتے ہیں، لیکن میٹھے اور لذیذ ڈش کا موازنہ کرنا ایک چیلنج ہے - وہ تکلیف دہ طور پر مختلف ہیں۔ پھر بھی، میں ان کے درمیان کچھ اختلافات کی نشاندہی کرنے کی کوشش کروں گا:
  • ArrayList فہرست انٹرفیس کو نافذ کرتا ہے جبکہ HashSet سیٹ انٹرفیس کو نافذ کرتا ہے ۔

  • ArrayList آپ کو انڈیکس کے ذریعہ ایک عنصر تک رسائی کی اجازت دیتا ہے: get آپریشن میں O(1) الگورتھمک پیچیدگی ہے، لیکن HashSet آپ کو صرف تکرار کے ذریعہ مطلوبہ عنصر تک رسائی حاصل کرنے دیتا ہے، جو O(1) سے O(n) تک الگورتھمک پیچیدگی پیدا کرتا ہے ۔

  • ArrayList ڈپلیکیٹ عناصر کی اجازت دیتا ہے۔ HashSet میں ، تمام عناصر منفرد ہوتے ہیں: HashSet میں پہلے سے موجود عنصر کو شامل کرنے کی کوئی بھی کوشش ناکام ہو جائے گی (ڈپلیکیٹس کو ہیش کوڈ کے ذریعے چیک کیا جاتا ہے، اس لیے اس مجموعہ کا نام)۔

  • ArrayList ایک اندرونی صف کا استعمال کرتے ہوئے لاگو کیا جاتا ہے، لیکن HashSet کو اندرونی HashMap کا استعمال کرتے ہوئے لاگو کیا جاتا ہے ۔

  • ArrayList عناصر کے اندراج کی ترتیب کو برقرار رکھتی ہے، لیکن HashSet ایک غیر ترتیب شدہ سیٹ ہے اور عناصر کی ترتیب کو برقرار نہیں رکھتا ہے۔

  • ArrayList کسی بھی تعداد میں null قدروں کی اجازت دیتا ہے، لیکن آپ HashSet میں صرف ایک null ویلیو شامل کر سکتے ہیں (بالآخر، عناصر کو منفرد ہونا چاہیے)۔

91. جاوا میں اتنے مختلف متحرک صفوں کے نفاذ کیوں ہیں؟

یہ زیادہ فلسفیانہ سوال ہے۔ ہم یہ بھی پوچھ سکتے ہیں کہ وہ اتنی نئی اور متنوع ٹیکنالوجیز کیوں لے کر آتے ہیں؟ سہولت کے لئے. اور یہی بات بڑی تعداد میں متحرک صف کے نفاذ کے بارے میں بھی درست ہے۔ ان میں سے کسی کو بھی بہترین یا مثالی نفاذ نہیں کہا جا سکتا۔ ہر ایک کے اپنے فوائد مخصوص حالات ہیں۔ ہمارا کام ان کے اختلافات اور ان کی طاقتوں/کمزوریوں کو جاننا ہے تاکہ وہ مجموعہ استعمال کر سکیں جو کسی بھی صورت حال کے لیے موزوں ترین ہو۔

92. جاوا میں کلیدی قدر ذخیرہ کرنے کے اتنے مختلف نفاذ کیوں ہیں؟

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

93. میں عناصر کے مجموعے کو کیسے ترتیب دوں؟

کہنے کی پہلی بات یہ ہے کہ مجموعہ عناصر کی نمائندگی کرنے والی کلاس کو Comparable انٹرفیس کو لاگو کرنا چاہیے، جو compareTo طریقہ پر مشتمل ہے۔ یا آپ کو ایک ایسی کلاس کی ضرورت ہے جو Comparator انٹرفیس کو لاگو کرے، بشمول اس کے موازنہ کا طریقہ۔ دونوں طریقے بتاتے ہیں کہ دی گئی قسم کی اشیاء کا موازنہ کیسے کیا جائے۔ چھانٹتے وقت یہ اہم ہے، کیونکہ چھانٹنے والے الگورتھم کو یہ سمجھنے کی ضرورت ہے کہ عناصر کا موازنہ کرنے کے لیے کون سا اصول استعمال کرنا ہے۔ یہ بنیادی طور پر موازنہ کو براہ راست اس کلاس میں لاگو کرکے کیا جاتا ہے جسے آپ ترتیب دینا چاہتے ہیں۔ Comparator کا استعمال کم عام ہے۔ فرض کریں کہ آپ کسی لائبریری سے کلاس استعمال کر رہے ہیں اور یہ Comparable کو لاگو نہیں کرتا ہے ، لیکن آپ کو اس کی اشیاء کا مجموعہ ترتیب دینے کی ضرورت ہے۔ چونکہ آپ اس کلاس کے کوڈ کو تبدیل نہیں کرسکتے ہیں (سوائے اس کو بڑھا کر)، آپ Comparator کا نفاذ لکھ سکتے ہیں جو اس بات کی نشاندہی کرتا ہے کہ کلاس کی اشیاء کا موازنہ کیسے کیا جائے۔ اور ایک مثال۔ اگر آپ کو ایک ہی قسم کی اشیاء کو مختلف طریقوں سے ترتیب دینے کی ضرورت ہے، تو آپ مختلف حالات میں استعمال کرنے کے لیے متعدد Comparator نفاذ لکھ سکتے ہیں۔ ایک اصول کے طور پر، بہت سے آؤٹ آف دی باکس کلاسز، جیسے String ، پہلے سے ہی موازنہ انٹرفیس کو نافذ کرتی ہیں۔ اس کا مطلب ہے کہ آپ کو ان کلاسوں کا موازنہ کرنے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ آپ صرف آگے بڑھ سکتے ہیں اور انہیں استعمال کرسکتے ہیں۔ پہلا اور سب سے واضح طریقہ TreeSet یا TreeMap کلاس استعمال کرنا ہے ۔ یہ کلاس عناصر کو کلاس عناصر کے ذریعہ نافذ کردہ موازنہ کی بنیاد پر ترتیب وار ترتیب میں ذخیرہ کرتے ہیں۔ یہ نہ بھولیں کہ TreeMap کلیدوں کو ترتیب دیتا ہے، اقدار کو نہیں۔ اگر آپ Comparable کے بجائے Comparator استعمال کرتے ہیں ، تو آپ کو Comparator آبجیکٹ کو مجموعہ کے کنسٹرکٹر کو منتقل کرنے کی ضرورت ہے جب آپ اسے بناتے ہیں:
TreeSet treeSet = new TreeSet(customComparator);
لیکن کیا ہوگا اگر آپ کے پاس مختلف قسم کا مجموعہ ہے؟ آپ اسے کیسے ترتیب دیتے ہیں؟ اس صورت میں، کلیکشن یوٹیلیٹی کلاس کا دوسرا طریقہ — sort() طریقہ — موزوں ہے۔ طریقہ جامد ہے، لہذا آپ کو صرف کلاس کا نام پہلے سے لکھنا ہے اور پھر ترتیب دینے کے لیے فہرست میں پاس کرنا ہے۔ مثال کے طور پر:
Collections.sort(someList);
اگر آپ Comparable کے بجائے Comparator کا نفاذ استعمال کر رہے ہیں ، تو آپ کو اسے دوسری دلیل کے طور پر پاس کرنے کی ضرورت ہے:
Collections.sort(someList, customComparator);
یہ آپریشن پاس کردہ فہرست میں عناصر کی اندرونی ترتیب کو تبدیل کر دے گا: فہرست کو موازنہ کرنے والے کا استعمال کرتے ہوئے ترتیب دیا جائے گا۔ نوٹ کریں کہ پاس کردہ فہرست کو تبدیل کرنا ضروری ہے، ورنہ طریقہ ناکام ہو جائے گا اور ایک UnsupportedOperationException پھینک دے گا ۔ تیسرا آپشن یہ ہے کہ اسٹریم کلاس کے ترتیب شدہ طریقہ کو استعمال کیا جائے ، جو مجموعہ کے عناصر کو ترتیب دیتا ہے ۔ اگر ہم موازنہ استعمال کر رہے ہیں :
someList = someList.stream().sorted().collect(Collectors.toList());
اگر ہم Comparator استعمال کر رہے ہیں :
someList = someList.stream().sorted(customComparator).collect(Collectors.toList());
چوتھا طریقہ دستی طور پر ایک ترتیب الگورتھم کو نافذ کرنا ہے، مثال کے طور پر، bubble sort یا merge sort ۔

آبجیکٹ کلاس۔ مساوی () اور ہیش کوڈ ()

94. جاوا میں آبجیکٹ کلاس کی مختصر تفصیل دیں۔

جائزے کے دوسرے حصے میں ، ہم نے پہلے ہی آبجیکٹ کلاس کے طریقوں پر تبادلہ خیال کیا ہے۔ یہاں میں آپ کو یاد دلاؤں گا کہ آبجیکٹ کلاس جاوا میں ہر کلاس کا آبجیکٹ ہے۔ اس کے 11 طریقے ہیں، جو بدلے میں تمام طبقات کو وراثت میں ملے ہیں۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 10 - 3

95. جاوا میں Equals() اور hashCode() کیا استعمال ہوتے ہیں؟

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

96. ہمیں جاوا میں equals() اور hashCode() کے درمیان معاہدے کے بارے میں بتائیں؟

سب سے پہلے، مجھے یہ کہنے دیجئے کہ equals() اور hashCode() طریقوں کو صحیح طریقے سے کام کرنے کے لیے ، ان کو درست طریقے سے اوور رائڈ کیا جانا چاہیے۔ ان کے نئے نفاذ کو ان اصولوں پر عمل کرنا چاہیے:
  • ایک جیسی آبجیکٹ جن کے لیے مساوی واپسی درست ہوتی ہے ان میں ایک ہی ہیش کوڈ ہونا چاہیے ۔
  • ایک جیسے ہیش کوڈز والی اشیاء ضروری نہیں کہ برابر ہوں۔
اب جائزے کے اگلے حصے تک توقف کرنے کے لیے ایک اچھی جگہ لگتا ہے!
مزید پڑھ:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION